我正在尝试为我的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) 我有一个包含大量功能的大型应用程序.有时,当您关闭主窗体时 - 它会顺利退出.其他时候表单关闭,但程序仍在运行.Visual Studio 2010提供哪些调试工具来识别行为不当的线程?
我有一个 WPF 应用程序,它使用许多在自己的线程中工作的第三方 DLL。
其中一些 DLL 有方法STOP()。
Thread.Sleep(1000)我在每种方法之后使用SomeObject.Stop()...
无论如何,当我终止应用程序时,某些线程仍在内存中。
有任何线索如何解决这个问题吗?
我正在使用Windows Form应用程序进行我的线程演示.当我点击button1时,它将启动线程并递归地完成工作.
这里的表格不会像我预期的那样挂起.我想在单击Button2时停止当前运行的线程.但是这不起作用.
private void button1_Click(object sender, EventArgs e)
{
t = new Thread(doWork); // Kick off a new thread
t.Start();
}
private void button2_Click(object sender, EventArgs e)
{
t.Abort();
}
static void doWork()
{
while (true)
{
//My work
}
}
}
Run Code Online (Sandbox Code Playgroud)
.当我调试时,button2_Click方法不会命中指针.我想因为Thread一直很忙.
如果我在某个地方出错,请纠正我.