私はwpfを使用しています。私のUIにボタンがあります。新しいスレッドのDispatcher.Invokeが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...");
を試してみたが、それも機能していません。何か案は?
データバインディングを使用することを考えましたか? – GETah
何かをする前に新しいスレッドを開始して操作を完了するのを待つのはなぜですか? – whoisthis