c# - 如何在 C# 中杀死线程?

标签 c# multithreading kill

我有一个线程可以打开 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/

相关文章:

c# - 组合框在使用触摸界面访问时会导致应用程序崩溃,但可以使用鼠标

c# - Visual C# Windows 窗体应用程序中的字符频率

python - 杀死在 Python 类 __init__ 中创建的子进程

c# - 如何找到在多边形内放置标签的最佳位置

c# - 按下鼠标左键时更改鼠标光标?

python - 使用线程向不同网站发出 GET 请求然后发出 POST 请求时遇到问题

C# 任务异步等待智能卡 - UI 线程阻塞

java - 为什么我的处理程序不工作?

c++ - 使用C++ shell()获取PID?

linux - 如何通过 STIME 终止 linux 进程(悬空 svnserve 进程)