私は wpf を使用しています。UI にボタンがあります。
ユーザーがクリックすると、autoresetevent を使用して新しいスレッドで新しいメソッドを実行する for ループがあります。
その新しいスレッドのそのメソッドでは、ラベルを使用しています。lblStatus と呼びましょう。UIにないこのスレッドのラベルを更新したい。wpf を使用すると、Dispatcher.Invoke を使用する必要があります。
ここに私のコードのサンプルがあります:
Thread thread= new Thread(StartLooking);
thread.Start();
_waitHandle.WaitOne();
private void StartLooking(object value)
{
if (lblStatus.Dispatcher.Thread == Thread.CurrentThread)
{
lblStatus.Content = "Scanning>...";
}
else
{
lblStatus.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() => lblStatus.Content = "Scanning>>>>>"));
}
_waitHandle.Set();
}
プログラムはここで停止します。ラベルの内容は変更されず、UI に戻りますが、ブロックされます。
私はもう試した
lblStatus.Dispatcher.Invoke(DispatcherPriority.Normal, new LblStatusThreadCheck(lblStatusThreadCheck), "Scanning...");
も同様ですが、それも機能していません。何か案は?