2011-10-18 91 views
1

我有一个应用程序有一个主要的用户界面和两个无模式窗口运行在他们自己的单独线程。将对象从线程传递到线程时,我只是在辅助线程的主线程上创建对象的副本。 当我想更新对象本身,并通过代码和辅助线程更改永久化,我该如何做到这一点?辅助线程始终保留旧对象的副本,并且永远不会更新,除非线程被杀死或停止,然后再次产生。多线程c#应用程序

+9

你为什么要复制对象?从多个线程引用同一对象并使用并发语义来确保对该对象的任何更改都是原子性的,这会更简单。 –

回答

0

有很多方法可以解决这个问题。一个将是该对象的存储库的线程安全共享实例。当一个线程更新它时,其他线程会得到一个更新的副本。你可以使用WCF来简化它。有些想法参见this article on WCF and concurrency。这是@Eric J对您问题的评论的实施。

另一个将通过事件来协调线程。当一个线程更新对象时,一个事件被发送给其他人。如果对象没有经常改变,那可能就足够了。

This question谈到第三种可能性:BackgroundWorker

+0

以及即时通讯使用wpf和即时消息使用调度大部分的调用...这个对象应该更新,但它不是 – jharr100

+0

我提交了一个编辑,包括在问题的正文中的信息,并适当标记。我没有足够的WPF经验来提供任何进一步的帮助。祝你好运! – neontapir