2012-04-18 104 views
3

Thread.Suspend()メソッドはご存じのとおり廃止されました。ボタンクリックイベントが発生したときにスレッドを即座に中断したい私はThread.Suspend()を使用して、それは完璧に動作しますが、誰もがThread.Suspend()メソッドを使用することは、タスクを中断する良い方法ではないことを示唆しています。私はタスクを中断するためにフラグを使用しましたが、ボタンクリックイベントが来るたびに、タスクを終了するのを待たなければなりません。 Thread.IsAliveフラグを使用してスレッドの終了を待機させましたが、このメソッドはフォームをフリーズします。Thread.Suspend()メソッドの代わりに

void ButtonClickEvent(object sender, ButtonClickEventArgs e) 
{ 
    TheadExitFlag = false; 

    if(MyThread != null) 
    { 
     while(MyThread.IsAlive); 
     //MyThread.Suspend(); 
    } 
} 

void MyTask(void) 
{ 
    while(TheadExitFlag) 
    { 
     // some process 
     Thread.Sleep(5000); 
    } 
} 

どうすればスレッドを即座に中断できますか?

+0

あなたがしたいことをもっと明確にしてください - あなたはスレッドを「中断」したい、あるいはスレッドを終了させることを100%確信していません。別の例: 'MyThread'は' MyTask'が実行されているスレッドへの参照ですか? 'ThreadExitFlag == true'のように、スレッドは終了しないでください。もしそうなら、名前を変更することをお勧めします。 –

+0

スレッドを一時停止したいのはなぜですか? – user844541

+0

間違った設備を使って問題を解決しようとしているのですが、どうしてスレッドを一時停止する必要があるのでしょうか? – sll

答えて

4

AFAIKと同じ機能を持つ代替手段はありません。 OS Suspend()の問題が言語/ライブラリの中でうまくいくかどうかは確かではありませんが、その試みは行われていないので、あまりにも難しく、不可能でさえ不可能かもしれません。

このような別名が存在するまでは、サスペンドフラグをポーリングしてから、同期オブジェクトの「再開」信号を待機します。私はこれにAutoResetEventを使用しました。

4

実行中の状態とアイドル状態を切り替えるには、ManualResetEventを使用します。

関連する問題