3

このコードは、複数のスレッドを開始する方法を示しています。

for (int i = 0; i < 8; i++)
{
    doImages    = new DoImages(this, TCPPORT + i);
    var thread  = new Thread(doImages.ThreadProc);
    thread.Name = "Imaging";
    var param = (i + 1).ToString();                      
    thread.Start(param);
}

アプリケーションを閉じる前にスレッドを停止しようとしていますが、その方法がわかりません。

4

3 に答える 3

2

最もクリーンで信頼性の高い方法は、それらをバックグラウンド スレッドにすることです。

for (int i = 0; i < 8; i++)
{
    doImages    = new DoImages(this, TCPPORT + i);
    var thread  = new Thread(doImages.ThreadProc);
    thread.Name = "Imaging";
    var param = (i + 1).ToString();  
    thread.IsBackground = true;          // **
    thread.Start(param);
}

Process (メイン スレッド) が終了すると、バックグラウンド スレッドは自動的に終了します。

于 2012-05-14T18:20:03.833 に答える
2

簡単なオプションの 1 つは、作成したすべてのスレッドへの参照を保存し、完了したらすべてのスレッドを結合することです。

Thread[] threads = new Thread[8];
for (int i = 0; i < 8; i++)
{
    doImages    = new DoImages(this, TCPPORT + i);
    var thread  = new Thread(doImages.ThreadProc);
    threads[i] = thread;
    thread.Name = "Imaging";
    var param = (i + 1).ToString();                    
    thread.Start(param);
}
for (int i = 0; i < 8; i++)
{
    threads[i].Join();
}

これは、アプリケーションが終了する前に、すべてのスレッドが終了するのを待ちます。

于 2012-05-14T17:54:56.273 に答える
0

thread.Abort();スレッド オブジェクトへの参照を保持し、単にアプリを終了したい場合に使用できます。

私の推測では、実行を終了してからアプリを閉じたいと思います。このためには、Join()または他の同期方法を使用してスレッドを同期する必要があります。

于 2012-05-14T17:54:35.410 に答える