我在winforms中有一个listbox,datagridview和textbox。
这是我想要做的事情
当用户选择列表框中的项目时,datagridview会加载一些与所选项目有关的数据,并且还有一个自动完成文本框,其自定义源会根据所选项目动态更改。
datagridview和autocomplete文本框的数据源来自rdbms(MYSQL)。
private void listBox1_SelectedValueChanged(object sender, EventArgs e)
{
string item=listBox1.SelectedValue.Tostring();
UpdateDataGridView(item);
UpdateACTextBox(item);
}
在此操作完成之前,用户无法在列表框中选择其他项目,只需10秒即可完成。
为了解决这个问题,我遇到了一些像异步方法这样的解决方案。
解决此问题的最佳方法是什么?
BackgroundWorker的, 异步和等待, 线程池, 多线程。
如果我没有正确研究,请提出建议。
开发人员遵循这些类型问题的传统方式是什么?
更新
我忘了提到我正在使用VS2010。由于vs2010不支持async和await。我想我需要放弃这个选项。
提前致谢
答案 0 :(得分:0)
在我看来,问题是你加载到listView的数据量很大。所以我建议将后台任务与listView的VirtualMode结合使用。在虚拟模式下,数据不会存储在listView中,您必须将值存储在自己的列表中。如果需要,listView将调用一个事件来询问您的值。如果数据不可用,只需返回一个虚拟或使用旧值。这将使listview简单地显示或显示旧值。在列表中复制完值后,只需使用原子操作交换列表的指针(变量)。从那时起,新数据用于更新列表而不是旧数据。调用更新功能以加载新的值。这种方法允许它,虽然在后台更新数据并不时更新它。唯一的缺点是您需要两次存储列表的值。在旧的显示缓冲区内和新的当前更新的缓冲区内。我希望有所帮助。