2014-05-10 71 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,該框架將爲您執行所有鎖定工作。

相關問題