我有一个线程可以打开 MyMessageAlert 类型的表单。 这个窗体是一个弹出窗口,当我调用它时打开。 它有一个计时器,它会在 30 秒后调用方法 CloseWindow()。
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();
}
但这并没有帮助。
最佳答案
也许您想使用 Background-Threads 而不是 Foreground-Threads。您的应用程序从至少一个前台线程(主进程线程)开始。如果您直接使用 Thread 类创建新线程(例如 new Thread(...)),这将是一个前台线程。
当至少一个前台线程仍在运行时,AppDomain 不会被卸载。为避免这种行为,您可以创建一个后台线程。通常您使用 ThreadPool 类中的后台线程,或者通过设置 IsBackground
- 直接在线程对象上的属性。
编辑:MSDN 的简短说明.
关于c# - 如何在 C# 中杀死线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4779791/