2011-07-05 29 views
2

スレッドで長時間実行しているタスクがあります。 Iすぐにスレッドを停止する

Thread a = new Thread(new ThreadStart()({ delegate() 
{ 
    Catalog.Generate(); //long running task 
})); 
a.Start(); 

Thread b = new Thread(new ThreadStart()({ delegate() 
{ 
    if(File.Exists(stopFile)) 
    { 
     a.Abort(); 
    } 
})); 
b.Start(); 

停止ファイルが作成されたとき、これはスレッドAを停止しますが、catalog.generate方法はまだ実行し続けますか?どのように私はそれを終了するのですか?

+0

私はすでにBackgroundWorkerを試しましたが、どちらも動作しません。 – user666423

答えて

1

問題はあなたのスレッドbが動作を開始し、チェックを行いすぐに終了します。

Thread b = new Thread(new ThreadStart()({ delegate() 
{ 
    int t=0; 
    while(i<100) 
    { 

     if(File.Exists(stopFile)) 
     { 
      a.Abort(); 

     } 
     else 
     { 
      i++; 
      Thread.Sleep(500); 
     } 
    } 

})); 
+0

申し訳ありませんが、すでにスレッドBにwhileループがあります(コピーするのを忘れてしまいました)。 – user666423

0

「に、それが呼び出されるスレッドでThreadAbortExceptionのを発生させます:

あなたが実行し続けるようにスレッドBのためのループのいくつかの並べ替えを追加する必要があります(これはサンプルコードではないベストプラクティスです)スレッドを終了するプロセスを開始します。このメソッドを呼び出すと、通常スレッドが終了します。

アボートメソッドはスレッドを閉じるべきであるというインジケータを送信します。どのように処理し、応答するのかは、スレッド処理に依存します。私はCatalog.Generateがおそらく応答しないことを提案します。

関連する問題