新しいタスクを実行し、いくつかのものを作成し、オブジェクトのリストを返すアプリケーションを開発しています...
新しいタスクを生成するとき、UI スレッドで for ループで変化するプログレスバーをシミュレートする必要があります...そしてタスクの完了後、ビューを更新する必要があります (使用している ViewModel プロパティの値を更新してMVVM パターン)。
問題は、タスクが起動されると GUI がフリーズし、プログレス バーが更新されないことです。タスクは別のスレッドでバックグラウンドで実行されると思いました(プールされているため)。では、なぜ私のGUIがブロックされているのですか??
ここに私のコードのスニペットがあります:
Task<List<Items>> myTask = Task.Factory.StartNew(() => queryHandler.GetItemssStatistics(items, sec, buyer, seller, From, To));
//Here is the simulation of ProgressBar changing that i need to be done when task is started
for (int i = 0; i < 100; i++)
{
Thread.Sleep(100);
StatusValue = i+1;
}
//Here is the section i need to do once the task finishes its execution to update my VM
//Wait for the task to finish its execution and retreive results:
List<Items> _tempResults = myTask.Result;
foreach (Items d in _tempResults)
{
ResultsList.Add(d);
}
if (ResultsList.Count == 0)
{
MessageBox.Show("Sorry, No items matched the defined research criteria!", "Warning",
MessageBoxButton.OK,
MessageBoxImage.Warning, MessageBoxResult.OK, MessageBoxOptions.ServiceNotification);
}
else
{
//Show items:
ResultsAvailable = Visibility.Visible;
}