【发布时间】:2016-03-18 07:22:07
【问题描述】:
我在 winforms 中有一个列表框、datagridview 和文本框。
这就是我想要做的事情
当用户在列表框中选择一个项目时,datagridview 会加载一些与所选项目相关的数据,并且还有一个带有自定义源的自动完成文本框,它会根据所选项目动态变化。
datagridview 和自动完成文本框的数据源来自 rdbms (MYSQL)。
private void listBox1_SelectedValueChanged(object sender, EventArgs e)
{
string item=listBox1.SelectedValue.Tostring();
UpdateDataGridView(item);
UpdateACTextBox(item);
}
在此操作完成之前,用户无法选择列表框中的其他项目,大约需要 10 秒才能完成。
为了解决这个问题,我遇到了一些解决方案,比如异步方法。
解决此问题的最佳方法是什么?
后台工作人员, 异步和等待, 线程池, 多线程。
如果我没有正确研究,请提出一些建议。
开发人员解决这类问题的常规方法是什么?
更新:
我忘了提到我使用的是 VS2010。由于 vs2010 不支持 async 和 await。我想我需要放弃那个选项。
提前致谢
【问题讨论】:
-
这取决于你在哪里有更多的经验。我通常使用 async/awayt 并调用仅返回数据的方法,不要在这些方法中调用任何 UI 属性。之后,一切都绑定到 UI 元素。
-
@Eugen 是否可以在返回数据表的方法中使用 async/await?因为我读到 async/await 应该只用于 void 方法,Task
-
@CSTRAIZE,你在哪里读到的?
void返回方法仅用于事件处理程序(如listBox1_SelectedValueChanged),但其他一切都应返回Task(或Task<T>)。 -
@PauloMorgado 是的,我明白了。我还有一个疑问,当用户单击列表框中的项目时,该项目值异步完成 10 秒的工作,同时当用户选择另一个项目和另一个项目时。这是否意味着,工作将完成 10 秒+10 秒,然后 UI 响应。
-
10 秒在数据库世界中是很长的时间。虽然后台工作人员可能会有所帮助,但您可能在 UpdateDataGridView 或 UpdateACTextBox 方法中做一些根本上很慢的事情。你没有向我们展示。
标签: c# datagridview listbox backgroundworker