ディスパッチャーを追加しましたが、ボタンを押したときにコマンドが実行された後でもUIがフリーズしました。WPFのディスパッチャーでもボタンのフリーズUIが発生する
私の現在の未遂修正
new Thread(() =>
{
Parallel.ForEach(BootstrapNodes,
new ParallelOptions { MaxDegreeOfParallelism = 2 },
(node) =>
{
Console.WriteLine(String.Format("Currently bootstrapping {0} on {1}",
node.NodeName,
node.IPAddress));
ChefServer.BootstrapNode(node);
});
}).Start();
UI
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Background, new Action(() => {
Parallel.ForEach(BootstrapNodes,
new ParallelOptions { MaxDegreeOfParallelism = 2 },
(node) =>
{
Console.WriteLine(String.Format("Currently bootstrapping {0} on {1}",
node.NodeName,
node.IPAddress));
ChefServer.BootstrapNode(node);
});
}));
をフリーズバージョンは、私は私の機能に深く潜るする必要がありますかUIがフリーズを避けるために呼び出しますか?私はどこにでもスレッドを産み出さないようにしようとしています。
編集: 私のバックグラウンドタスクは非常に高価です。
バックグラウンドスレッドからUIスレッドのUIコントロールへのスレッドセーフ書き込みを「起動」していないのですか? –
この例をご覧ください:https://stackoverflow.com/a/1644254 –
@RobertHarveyありがとうございました。だから、私の場合、私の操作は非常にコストがかかり、私が思ったようにディスパッチャスレッドに属さない。並行foreachがUIのフリーズを避けないでしょうか?なぜ私がまだUI上でブロックされているのかわかりません –