2014-05-10 34 views
-1

我有以下情况。窗体和后台线程工作人员在Windows窗体应用程序之间共享对象

多种形式显示存储在共享对象中的信息。后台工作线程不断更新共享对象。

我想过让共享对象像单身人士一样,但我担心多线程问题。

解决这类问题的最好方法是什么?

有人问我有什么问题,但我想我已经介绍了,但我会尝试添加更多的细节。

好吧,我有一个可以说这样的

public class Connections 
{ 
public List<User> Users {get;set;} 
public List<Computer> Computers {get;set;} 
} 

一个对象,然后我是在同时打开2种不同的形式。一种形式是用于显示用户,另一种用于显示计算机。

接下来我有一个填充用户和计算机的后台线程。

如何共享后台线程正在构建的数据与多种表单?

+0

你还没有告诉我们问题是什么。 – Enigmativity

+0

什么是“共享对象”?表单控件? 'BackgroundWorker.ReportProgress'已经编组到UI线程;你在做什么? –

+0

我试图添加更多的细节问题。不,我没有对BackgroundWork做任何事情,实际上我不确定它会做什么(去看看现在) – Josh

回答

0

后台线程和UI线程之间共享的任何数据都需要通过锁保护。也就是说,您需要选择一个对象进行同步(可能是共享的“主对象”,如果有的话),并且每当您修改或读取该对象的成员变量时,都需要先锁定它。

或者,您可以随时使用后台线程中的Control.Invoke()来更新数据,以便只有UI线程才会真正修改共享对象,从而不再在线程之间共享。

0

解决此问题的简单而干净的方法是使用Tasks(System.Threading.Tasks)而不是BackgroundWorker。传入在UI线程上创建的SyncronizationContext,该框架将为您执行所有锁定工作。

相关问题