2014-11-14 24 views

回答

3

不,没有这样的保证。如果你想从多个线程访问它,你需要自己同步访问任何共享内存。

当然,如果您使用BGW内置的线程之间传递数据的机制,比如通过它存储的ResultProgress数据,那么它将正确地同步访问该数据。

2

是的,只要您遵循BackgroundWorker合同,这不是您必须担心的事情。换句话说,使用提供的事件将数据传递给UI线程ProgressChanged和RunWorkerCompleted。 .NET Framework源代码没有为此评分任何优雅点,但同步并不明确。这很常见,它依赖于许多地方的隐式同步。

但有两个确保UI线程可以看到更新。首先是PostMessage(),它是一个winapi函数,用于发信号通知UI线程需要查看调用队列。 Used here,但是你根本看不到锁,它被埋在了Windows的内部。 可以更容易识别的看到的内容是在清空调用队列的Winforms代码中。它在开始迭代该队列之前需要一个锁。你可以看到it here,它是threadCallbackList成员上的锁。

相关问题