在UI表单和后台线程之间共享变量的安全方法

时间:2015-01-29 07:30:19

标签: c# multithreading variables thread-safety

在我的项目中,我有一个Windows窗体应用程序,我希望使用后台线程中的一些变量向用户显示后台工作的状态。根据它们的价值,我会显示一些信息或其他信息。我怎么能以安全的方式面对线程之间共享变量的问题?

感谢。

1 个答案:

答案 0 :(得分:1)

.Net已经附带了System.ComponentModel.BackgroundWorker类,专门用于处理执行后台任务和与GUI通信。使用它。


<强>更新

如果你想要另一种方法,这就是我的工作。

1)创建你的消息&#34;类。这会存储您要共享的所有信息。

2)为每个线程创建一个队列。使用SyncLock(C#锁)来读/写它。

3)当你想与一个线程交谈时,通过将消息添加到队列中,向它发送一个消息对象,其中包含所需信息的副本。

4)然后,工作线程可以从队列中读取,按顺序读取和处理每条消息。没有消息时,只需睡觉。

确保您不在两个线程之间共享对象。一旦您的GUI线程在队列中粘贴消息,GUI线程就不再拥有该消息。它不能保留对该消息的引用,否则您将陷入麻烦。

这不会为您提供最佳性能,但对于大多数应用程序来说它都足够好。更重要的是,它会使犯错误更加困难。