我目前有一個線程可以偵聽來自網絡的數據,然後在其上運行規則。然後我想將數據傳遞給GUI。我擔心在GUI中發生死鎖。我無法弄清楚把互斥體放在GUI一邊。我也使用c#和dotnet 3.5。Winforms應該我多線程或使用事件計時器?
我想到的是 1)使用計時器來創建事件並轉儲線程。擔心表現。 2)使用中間事件將數據複製到GUI。 3)挖掘並找出使用GUI的線程安全方式。
您認爲最好的方法是什麼?
編輯:這是我正在使用的解決方案。我傳入更改後的元素,然後用互斥鎖保護大對象。我使用幫助函數切換線程使用InvokeRequired然後BeginInvoke與委託。從閱讀答案拉動,然後跟隨鏈接,直到達到Threading in Windows Forms由Jon Skeet。
delegate void UInt32ParameterDelegate(UInt32 n);
public void UpdateLocation(UInt32 n)
{
if (InvokeRequired)
{
// We're not in the UI thread, so we need to call BeginInvoke
BeginInvoke(new UInt32ParameterDelegate(UpdateLocation), new object[] { n });
return;
}
// Must be on the UI thread if we've got this far
this.engine.location.UpdateBusy.WaitOne();
// do the work in here
this.engine.location.UpdateBusy.ReleaseMutex();
}
您使用.net 2.0嗎? – JoshBerke 2009-03-05 16:15:34