在我的项目中,我有一个Windows窗体应用程序,我希望使用后台线程中的一些变量向用户显示后台工作的状态。根据它们的价值,我会显示一些信息或其他信息。我怎么能以安全的方式面对线程之间共享变量的问题?
感谢。
答案 0 :(得分:1)
.Net已经附带了System.ComponentModel.BackgroundWorker类,专门用于处理执行后台任务和与GUI通信。使用它。
<强>更新强>
如果你想要另一种方法,这就是我的工作。
1)创建你的消息&#34;类。这会存储您要共享的所有信息。
2)为每个线程创建一个队列。使用SyncLock(C#锁)来读/写它。
3)当你想与一个线程交谈时,通过将消息添加到队列中,向它发送一个消息对象,其中包含所需信息的副本。
4)然后,工作线程可以从队列中读取,按顺序读取和处理每条消息。没有消息时,只需睡觉。
确保您不在两个线程之间共享对象。一旦您的GUI线程在队列中粘贴消息,GUI线程就不再拥有该消息。它不能保留对该消息的引用,否则您将陷入麻烦。
这不会为您提供最佳性能,但对于大多数应用程序来说它都足够好。更重要的是,它会使犯错误更加困难。