3

我的申请中有一个子表格。这个表单有大约 50 多个组合框,每个人都从数据库中获取数据。所有组合框都在表单的加载事件中加载。数据很大。数据检索大约需要 2 分钟。当我打开这个表单时,我的整个应用程序变得没有响应。应用程序挂起,大约 2 分钟后恢复正常:/

正如我所研究的,我们可以使用不同的线程来避免这种情况。有人可以指导,实现多线程以使我的应用程序响应是否可能、安全可靠?

如果可能的话,请指导我并编写一个示例代码,多线程在 c# 中是如何工作的。您可以简单地解释使用具有网格视图的表单,该表单在单独的线程中将数据表作为 daTASOURCE 并且 GUI 响应即使数据库需要太多时间...任何帮助表示赞赏。提前谢谢!

4

2 回答 2

7

看看BackgroundWorker 类。这可以完全满足您的要求。您还可以包含进度条之类的内容,以向用户显示数据仍在加载中,然后再继续以您的子表单执行操作。

于 2013-04-26T10:58:01.383 回答
3

使用任务并行库,从版本 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/

反应式扩展有点难。但无论如何都很好。样品在这里。这里有一些介绍:

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 也是一个不错的选择,这取决于您选择什么。

于 2013-04-26T11:10:41.587 回答