2011-01-24 4 views
2

私はMyMessageAlert型のフォームを開くスレッドを持っています。 このフォームは、私が呼び出したときに開くポップアップウィンドウです。 30秒後にメソッドCloseWindow()を呼び出すタイマーがあります。スレッドをC#でキルする方法は?

m_messagAlert = new MyMessageAlert(); 
ParameterizedThreadStart thStart = new ParameterizedThreadStart(m_messagAlert.setMessage); 
Thread thread = new Thread(thStart); 
thread.Start(strMessage); //at this point, the MyMessageAlert form is opened. 

私はタイプのスレッドのリストを定義している:

public List<Thread> m_listThread; 

私はスレッドを作成するたびに、私は私のリストに追加します。

m_listThread.Add(thread); 

私はアプリケーションを閉じると私は、開かれたMyMessageAlert型のフォームがすぐに(30秒待たずに)閉じられることを望みます。 問題は私がそれを止めることができないということです!

私は中止()関数を使用してループをリストの上に行くことによって、それを殺そうとした:

foreach (Thread thread in m_listThread) 
{ 
     if (thread.IsAlive) 
      thread.Abort(); 
} 

しかし、それは助けにはなりません。

答えて

11

フォアグラウンドスレッドの代わりにバックグラウンドスレッドを使用したいことがあります。アプリケーションは、少なくとも1つのフォアグラウンドスレッド(メインプロセススレッド)で開始します。スレッドクラスを直接使用して新しいスレッド(例えば、新しいスレッド(...))を作成すると、これはフォアグラウンドスレッドになります。

少なくとも1つのフォアグラウンドスレッドがまだ実行中の場合、AppDomainはアンロードされません。この現象を回避するには、バックグラウンドスレッドを作成することができます。通常は、ThreadPoolクラスからのバックグラウンドスレッドを使用するか、スレッドオブジェクトに直接IsBackground -Propertyを設定します。

編集:MSDNの簡単な説明。

+0

こんにちは!コマンド thread.IsBackground = trueを追加しました。 –

関連する問題