【问题标题】:Cross-thread operations WinForms app跨线程操作 WinForms app
【发布时间】:2014-04-22 22:11:50
【问题描述】:

是否有一种简单、实际可重用的方式/方法来执行长时间运行的跨线程操作?我的意思是,我需要一些需要一段时间的东西(发送邮件、上传到数据库和 FTP 服务器),但我还需要同时与表单及其控件进行交互。

【问题讨论】:

  • 那么...有什么问题?您可以将长时间运行的操作放在不同的线程上,如果您需要访问控件,只需将调用委托给 UI 线程。
  • 谢谢 PoweredByOrange,谢谢@JimMischel,我现在正在查看该链接。我不得不承认,对我来说,术语必须是学习中最难的部分。这可能是我 90% 的搜索从未产生有用结果的原因。出于某种原因,我可以记住其他事情,但术语似乎并没有坚持。

标签: c# .net multithreading winforms


【解决方案1】:

有很多选择。主要问题是您需要将工作推送到单独的线程中,但不能从该线程访问您的控件。

最常见的机制是使用:

【讨论】:

  • @JimMischel 这并不直接处理线程问题,尽管您可以在使用 Task/Task 时使用它来简化代码编写。
【解决方案2】:

查看BackgroundWorker 类。这将允许在更新 UI 的同时运行长时间运行的进程,而无需手动 Invoke() UI 更新 UI 线程,如果手动使用线程则必须这样做。

【讨论】:

    【解决方案3】:

    您希望表单的 Invoke/BeginInvoke 方法允许对 UI 进行跨线程操作。

    最好是创建一个类,在另一个线程中执行长任务,并有一些事件来通知表单,然后在表单中您可以使用 this.BeginInvoke 在主线程中执行 UI 操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 2011-05-10
      • 2011-07-11
      • 1970-01-01
      相关资源
      最近更新 更多