【问题标题】:BackgroundWorker completed event - which thread?BackgroundWorker 完成事件 - 哪个线程?
【发布时间】:2009-03-22 03:50:31
【问题描述】:

BackgroundWorker 控件的已完成事件是否返回到 GUI 线程上,还是我必须将其编组返回。

另外,进度事件会在 GUI 线程上返回还是我必须将其编组返回?

【问题讨论】:

    标签: c# multithreading background


    【解决方案1】:

    这两个事件都将被编组到 UI 线程。

    【讨论】:

      【解决方案2】:

      所有事件都将返回到创建 BackgroundWorker 实例的线程上。您的客户所要做的就是监听事件。

      您可能来过这里,但另请参阅:BackgroundWorker Events

      【讨论】:

        【解决方案3】:

        它将在发起操作的 UI 线程上引发。在后台,BackgroundWorker 使用SynchronizationContext 在两个线程之间进行封送处理。 WPF 和 WinForms 都会在启动时安装适当的 SynchronizationContext。

        【讨论】:

          【解决方案4】:

          如果 BackgroundWorker 是从 UI 线程创建的,那么这两个事件也将在 UI 线程上引发。

          如果它是从后台线程创建的,则该事件将在未定义的后台线程上引发。

          有关更多信息,请参阅此帖子和此连接问题。

          https://stackoverflow.com/a/2806824/279999

          http://connect.microsoft.com/VisualStudio/feedback/details/116930/backgroundworker-components-progresschanged-and-runworkercompleted-event-run-on-wrong-thread

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-07-13
            • 1970-01-01
            • 2013-12-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多