【问题标题】:Allow a worker thread to work while the main thread is showing a dialog允许工作线程在主线程显示对话框时工作
【发布时间】:2012-01-30 06:19:14
【问题描述】:

我想将表单显示为对话框,但问题是工作线程已停止工作,现在正在等待显示对话框的主线程。

工作线程不应该等待,应该开始在后台工作。我怎样才能做到这一点?

【问题讨论】:

  • 您的工作线程是否使用Invoke 命令来更新主线程上的 GUI 控件? Invoke 一直等到命令完成,但它不能因为主线程被对话框阻塞。尝试改用BeginInvoke

标签: c# multithreading forms


【解决方案1】:

尝试使用BackgroundWorker,它将在单独的线程而不是主线程中完成您的工作。

查看此link 了解如何与后台工作人员一起工作。

【讨论】:

    【解决方案2】:

    你还没有说你的工作线程在做什么。假设您已经在使用后台线程,我猜您正在使用 Control.InvokeDispatcher.Invoke,它们是阻塞调用,以便与 UI 通信。

    如果您改用Control.BeginInvokeDispatcher.BeginInvoke,您将不会被阻止。这些调用只是将消息发布到 UI 线程,而无需等待它被处理。

    当然,可能还有其他事情发生 - 向我们提供更多信息会很有帮助。

    【讨论】:

      猜你喜欢
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多