在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://blogs.msdn.com/b/csharpfaq/archive/2010/06/01/parallel-programming-in-net-framework-4-getting-started.aspx

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

http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2010/08/18/reactive-extensions-for-net-stuff-happens.aspx

无论如何,你可以找到非常简单的更多信息。

谈到BackgroundWorker。 这是winforms的好方法。 但这种方法已经过时了。 TPL或Rx是新的方法,更多的性能,更舒适,特别是当你需要很多控制时。 使用异步操作进行如此多的控制也是UI设计的一个问题,也许应该进行更改。 无论如何BackgroundWorker也是一个不错的选择,这取决于你选择什么。