我正在尝试为我的 C# 应用程序编写 ThreadManager。我创建了几个线程:
给我的文本作者一个主题。
一个监控一些统计数据的线程。
执行大量计算的多个线程(每个内核最多 4 个线程,我在 2x 四核服务器上运行我的应用程序)。
我的应用程序通常一次最多运行 24 小时,因此所有线程都是在开始时创建的,并且它们会在应用程序运行的整个过程中持续存在。
我想在一个地方“注册”我的所有线程,当应用程序关闭时,我只需调用一个方法,它会遍历所有已注册的线程并将它们关闭。
为此,我设计了以下类:
public class ThreadManager
{
private static Object _sync = new Object();
private static ThreadManager _instance = null;
private static List<Thread> _threads;
private ThreadManager()
{
_threads = new List<Thread>();
}
public static ThreadManager Instance
{
get
{
lock (_sync)
{
if (_instance == null)
{
_instance = new ThreadManager();
}
}
return _instance;
}
}
public void AddThread(Thread t)
{
lock (_sync)
{
_threads.Add(t);
}
}
public void Shutdown()
{
lock (_sync)
{
foreach (Thread t in _threads)
{
t.Abort(); // does this also abort threads that are currently blocking?
}
}
}
}
我想确保我的所有线程都被终止,以便应用程序可以正常关闭,并且在某些计算过程中关闭也很好。我应该知道这里有什么吗?这种方法适合我的情况吗?
最佳答案
如果您将线程设置为后台线程,它们将在应用程序关闭时被杀死。
myThread.IsBackground = true;
显然,如果您需要线程在关闭前完成,这不是您想要的解决方案。
关于c# - 关闭多线程应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2314861/