ReportProgressを介して定期的にGUIを更新するバックグラウンドワーカーがいます。
更新は定期的に、たとえば5秒ごとに発生しますが、20秒になることもあります。設定された時間に更新を実行するために、ワーカープロセスをスリープ状態に送信し、スリープ状態になると、GUIを新しい情報で更新します。
ワーカーはキャンセルをサポートし、スリープ以外では正しくキャンセルします。
待機期間中にキャンセルを呼び出せるようにしたいのですが、スレッドをスリープ状態にすると、これは不可能になります。
スレッドのスリープをシミュレートするには、ループを呼び出して、ループの一部としてキャンセルを確認する必要があると思います。
これを達成するための最良の方法は何ですか、私のタイミングは私の試みとは完全にずれています。
long counter = 0;
long sleepfor = timelinespeed*1000;
int timelinespeed = 10;
while (counter != sleepfor)
{
Thread.Sleep(1);
counter++;
if (bkgwk.CancellationPending)
{
cancelled = true;
e.Cancel = true;
bkgwk.Dispose();
break;
}
}