我有一個WPF C#應用程序,它使用分派器計時器來更新UI。WPF中的線程鎖定,帶調度計時器
在線程A中,在類DataProcessor
中,我更新了一個變量,一個名爲'FinalMarkers'的自定義結構。
static readonly Object mLock = new Object();
static List<Storage.FiducialMarkers> finalMarkers;
public List<Storage.FiducialMarkers> FinalMarkers
{
get { return finalMarkers; }
set
{
lock (mLock)
{
finalMarkers = value;
}
}
}
,然後線程運行中:
FinalMarkers = pullFiducialData();
在我的UI形式,我傳遞的DataProcessor
到實例
我使用下面的鎖定變量更新表單的構造函數。
protected DataProcessor Data = null;
public FormView(DataProcessor _Data)
{
Data = _Data;
}
然後我有一個調度員計時器調用變量:
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(20);
timer.Tick += timer_Tick3d;
timer.Start();
在計時器滴答功能
,我搶值:
List<Storage.FiducialMarkers> tmpList = new List<Storage.FiducialMarkers>();
tmpList = Data._processingArgs.FinalMarkers;
這將運行一段時間,然後崩潰沒有錯誤。我處理線程鎖定錯誤?
這是將數據從另一個線程傳遞到調度計時器的正確方法嗎?
謝謝。
我懷疑它與你的鎖有關。實施它只是沒有用處。你必須弄清楚拋出了什麼異常,並且包含堆棧跟蹤和消息。 – Evk