2011-01-24 172 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

也许你想使用Background-Threads而不是Foreground-Threads。您的应用程序至少从一个Foreground-Thread(主进程线程)开始。如果直接使用Thread-class创建新的线程(例如新线程(...)),则这将成为前台线程。

当至少有一个前台线程仍在运行时,AppDomain不会被卸载。为了避免这种行为,你可以创建一个后台线程。通常,您可以使用ThreadPool类中的后台线程,或者直接在线程对象上设置IsBackground-Property。编号:MSDN的简短说明。

+0

嗨,它工作!我们刚刚添加了命令 thread.IsBackground = true; – 2011-01-24 11:49:42