Startメソッドでは、長期実行タスクを別のスレッドに委譲する次のプログラムがあります。 Stopメソッドが呼び出されると、私はワーカースレッドが現在のタスクの実行を完了し、途中に残さないようにする必要があります。タスクが既に完了してスリープ状態にある場合、即座に停止することができます。タスクが非同期スレッドによって処理されるまで、メインスレッドが停止するまで待ちます。
どうすればいいですか教えてください。あなたは常に終了する全体として、実行時間の長いタスクスレッドをしたいスレッドがThread.Join()を呼び出して実行されるまで、あなたは待つだけしたと仮定すると
static int itemsProcessed = 0;
static Thread worker;
static void Start()
{
var ts = new ThreadStart(Run);
worker = new Thread(ts);
worker.Start();
}
static void Stop()
{
//wait until the 'worker' completes processing the current item.
Console.WriteLine("{0} Items Processed", itemsProcessed);
}
static void Run(object state)
{
while (true)
{
ALongRunningTask();
itemsProcessed++;
Thread.Sleep(1000);
}
}
これは処理が揮発性である必要があります。そうしないと、他のスレッドは値が変更されたことを決して知らないことがあります。また、スリープループの代わりにworker.Joinメソッドを使用することもできます。 –
両方の正しいステートメント、私はちょっとした試作をしています。投稿を編集しました – BrokenGlass