【问题标题】:Responsive GUI using Multi-threading in C# Winforms在 C# Winforms 中使用多线程的响应式 GUI
【发布时间】:2013-04-26 19:10:41
【问题描述】:

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

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

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

【问题讨论】:

  • 您希望进行异步加载,同时努力避免在 GUI 周围出现太多线程。您是否尝试过启动一个简单的线程来为您执行该调用,并在它准备好时通过回调通知您?
  • .NET 中关于线程的最佳教程之一:yoda.arachsys.com/csharp/threads/index.shtml
  • 亲爱的鲨鱼,我从来没有实现过多线程。这就是我在这里问的原因。如何实施?实施是否安全?什么时候不应该实施?您能否向我发送一个示例代码,该代码将从数据库中填充数据表,然后在表单的加载事件中分配给 gruidview。甚至数据检索可能需要超过 2 分钟,应用程序应该响应......
  • @user2109843 如果您从未实现过多线程,那么最好的选择是一些书。买本书。

标签: c# multithreading winforms


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    使用任务并行库,从版本 4 或 Parallel Extensions 开始包含在 .NET 中。使用 TPL 的示例你可以找到here

    并在此处阅读更多相关信息。:

    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-I-I

    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/

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多