如何杀死C#中的线程?
问题描述:
我有一个线程可以打开一个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();
}
但它并不能帮助。
答
也许你想使用Background-Threads而不是Foreground-Threads。您的应用程序至少从一个Foreground-Thread(主进程线程)开始。如果直接使用Thread-class创建新的线程(例如新线程(...)),则这将成为前台线程。
当至少有一个前台线程仍在运行时,AppDomain不会被卸载。为了避免这种行为,你可以创建一个后台线程。通常,您可以使用ThreadPool类中的后台线程,或者直接在线程对象上设置IsBackground
-Property。编号:MSDN的简短说明。
嗨,它工作!我们刚刚添加了命令 thread.IsBackground = true; – 2011-01-24 11:49:42