我有一个线程打开 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();
}
但这没有帮助。
也许您想使用后台线程而不是前台线程。您的应用程序至少从一个前台线程(主进程线程)开始。如果直接使用 Thread 类创建新线程(例如 new Thread(...)),这将是一个前台线程。
当至少一个前台线程仍在运行时,AppDomain 不会被卸载。为了避免这种行为,您可以创建一个后台线程。通常,您使用 ThreadPool 类中的后台线程,或者通过设置IsBackground- 直接在线程对象上的属性。
编辑:简短的解释MSDN.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)