2011-01-24 2 views
2

У меня есть нить, которая открывает форму типа MyMessageAlert. Эта форма представляет собой всплывающее окно, которое открывается, когда я его вызываю. У этого есть таймер, который вызывает метод CloseWindow() через 30 секунд.Как убить нить в 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 секунд). Проблема в том, что я не могу остановить!

Я пытался убить его, перейдя по списку с петлей, используя функцию Abort():

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

Но это не помогает.

ответ

11

Возможно, вы хотите использовать Background-Threads вместо Foreground-Threads. Ваше приложение начинается с по крайней мере одного Foreground-Thread (основной поток процесса). Если вы создаете новые потоки с использованием класса Thread напрямую (например, новый Thread (...)), это будет передняя часть.

AppDomain не разгружается, когда по крайней мере один поток переднего плана все еще работает. Чтобы избежать такого поведения, вы можете создать фоновый поток. Как правило, вы используете фоновые потоки из класса ThreadPool или устанавливаете непосредственно объект потока IsBackground.

Редактировать: Краткое описание на MSDN.

+0

Привет, он работает! мы просто добавили команду thread.IsBackground = true; –