オンラインで投稿されたいくつかの例を調べましたが、質問に答えることができません。
forループで1ずつ増加している'p'変数があります。UIに計算の進行状況を表示したい(「p」が0から1000000にどのように増加しているかを示すため)。別のスレッドで計算を行い、ディスパッチャーを呼び出してUIのResultBoxを更新します。例:
int p=0;
...
private void GO(object sender, System.Windows.RoutedEventArgs e)
{
new Thread(delegate()
{
DoWork();
}).Start();
}
void DoWork()
{
for (int i = 0; i < 1000; i++)
{
for (int j = 0; j < 10000; j++)
{
p++;
this.Dispatcher.BeginInvoke(delegate { ResultBox.Text = p.ToString(); });
}
}
}
何らかの理由でこれは機能しません。ただし、this.Dispatcherの直前にThread.Sleep(1)を配置すると、意図したとおりに機能します。UIアップデート(ディスパッチャー)が頻繁に呼び出されてフリーズするということですか?それを行う他の方法はありますか?
ありがとうございました