ディスパッチャータイマーを使用してUIを更新するWPF C#アプリケーションがあります。ディスパッチャータイマーを使用した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;
}
}
}
と、スレッドの実行内:私のUIフォームで
FinalMarkers = pullFiducialData();
、私はDataProcessor
のインスタンスを渡しています、私は、以下のものを使用して、変数の更新をロックしてい
Formのコンストラクタ
変数を呼び出して、ディスパッチャタイマー持っている私は、その後 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