0

スレッドデモにWindowsフォームアプリケーションを使用しています。button1をクリックすると、スレッドが開始され、再帰的に作業が行われます。

ここでは、フォームが期待どおりにハングしません。Button2をクリックしたときに、現在実行中のスレッドを停止したい。ただし、これは機能しません。

        private void button1_Click(object sender, EventArgs e)
        {
            t = new Thread(doWork);          // Kick off a new thread
            t.Start();               
        }

        private  void button2_Click(object sender, EventArgs e)
        {                
            t.Abort();
        }    

        static void doWork()
        {    
            while (true)
            {
              //My work    
            }
        }
      }

.Imデバッグ中、button2_Clickメソッドはポインターにヒットしません。スレッドが忙しいからだと思います。

どこかでうまくいかない場合は訂正してください。

4

1 に答える 1

9

このようにスレッドを殺すことはできません。その理由は、スレッドにロックを追加し、ロックが解放される前にそれを強制終了する状況を回避するためです。

グローバル変数を作成し、それを使用してスレッドを制御できます。

簡単なサンプル:

private volatile bool m_StopThread;

private void button1_Click(object sender, EventArgs e)
{
    t = new Thread(doWork);          // Kick off a new thread
    t.Start();               
}

private  void button2_Click(object sender, EventArgs e)
{                
    m_StopThread = true;
}    

static void doWork()
{    
    while (!m_StopThread)
    {
          //My work    
    }
}
于 2012-10-15T11:23:35.433 に答える