所以我知道你不应该使用
Thread.Abort()
Run Code Online (Sandbox Code Playgroud)
但我从未得到过很好的解释.是否存在性能损失或隐藏的问题?
我知道你不能忽略/吞下ThreadAbortException(这是有道理的)
我有一些非常大的应用程序混合使用c#和j#.
有时当我关闭它时,有一些线程没有关闭,它们挂在任务管理器中,不可能从那里杀死它们.
我找到所有这些线程并将它们添加到结束事件中确实存在问题.
是否有某种方式猛烈杀死在关闭事件中由应用程序打开的所有线程?...
谢谢.
是否有一些工具可以告诉我在关闭应用程序时打开了哪些线程?
我正在尝试为我的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 …Run Code Online (Sandbox Code Playgroud)