在C#Winforms中使用multithreading的响应式GUI
我的申请表中有一个子表单。 这个表格有大约50个combobox,每个人都从数据库中获取数据。 所有组合都在表单的加载事件中加载。 数据很大。 数据检索大约需要2分钟。 当我打开这个表单时,我的整个应用程序都没有响应。 应用程序挂起并在大约2分钟后恢复生命:/
正如我所研究的,我们可以使用不同的线程来避免这种情况。 有人可以指导,实现multithreading是否可行,安全可靠,以使我的应用程序响应?
请指导我并编写一个示例代码,如果可能的话,multithreading如何在c#中工作。 您可以简单地解释使用具有gridview的表单,该表单在单独的线程中将数据表作为daTASOURCE,并且GUI响应甚至数据库需要太多时间…任何帮助都表示赞赏。提前提醒!
看一下BackgroundWorker类 。 这可以完全按照你的意愿行事。 您还可以包含类似进度条的内容,以向用户显示数据在继续之前仍在加载,并在您的子表单中执行操作。
使用任务并行库,它从版本4或Parallel Extensions开始包含在.NET中。 您可以在此处找到使用TPL的示例
在这里阅读更多相关信息:
http://bradwilson.typepad.com/blog/2012/04/tpl-and-servers-pt1.html
http://www.codeproject.com/Articles/30975/Parallel-Extensions-for-the-NET-Framework-Part-II
http://thenewtechie.wordpress.com/2012/01/03/introduction-to-tpl-part-1/
Reactive Exensions有点困难。 但无论如何好。 样品在这里 。 这里有一些介绍:
http://www.codeproject.com/Articles/47498/A-quick-look-at-the-Reactive-Extensions-Rx-for-Net
无论如何,你可以找到非常简单的更多信息。
谈到BackgroundWorker。 这是winforms的好方法。 但这种方法已经过时了。 TPL或Rx是新的方法,更多的性能,更舒适,特别是当你需要很多控制时。 使用异步操作进行如此多的控制也是UI设计的一个问题,也许应该进行更改。 无论如何BackgroundWorker也是一个不错的选择,这取决于你选择什么。