C# 为什么我的线程池会被卡住,除非在WaitHandle之前放置MessageBox?
我创建的线程池将启动,但如果在打开.exe文件或从命令行执行它时从complete启动,则不会完成,只有在运行调试器时,它才会完全运行 我已经编写了WinForms程序来创建一个包含两个线程的线程池,并等待线程完成后结束程序 我编写它是为了从命令行启动.exe并接受参数,但我遇到的问题是线程启动,但由于某种原因,在WaitHandle.WaitAll()之前会被卡住,除非它与调试器一起运行。我注意到的一件事是,当我将MessageBox放在WaitHandle之前时,它将完成,但我需要程序在后台运行,而不需要任何MessageBoxC# 为什么我的线程池会被卡住,除非在WaitHandle之前放置MessageBox?,c#,.net,multithreading,command-line,threadpool,C#,.net,Multithreading,Command Line,Threadpool,我创建的线程池将启动,但如果在打开.exe文件或从命令行执行它时从complete启动,则不会完成,只有在运行调试器时,它才会完全运行 我已经编写了WinForms程序来创建一个包含两个线程的线程池,并等待线程完成后结束程序 我编写它是为了从命令行启动.exe并接受参数,但我遇到的问题是线程启动,但由于某种原因,在WaitHandle.WaitAll()之前会被卡住,除非它与调试器一起运行。我注意到的一件事是,当我将MessageBox放在WaitHandle之前时,它将完成,但我需要程序在后台
eventArray = new AutoResetEvent[2];
eventArray[0] = new AutoResetEvent(false);
eventArray[1] = new AutoResetEvent(false);
ThreadPool.QueueUserWorkItem(new WaitCallback(o =>
{
errors000 = Process000Or001(table, "000", eventArray[0], logFile835, batchID);
}), eventArray[0]);
ThreadPool.QueueUserWorkItem(new WaitCallback(o =>
{
errors001 = Process835Or837(table, "001", eventArray[1], logFile837, batchID);
}), eventArray[1]);
//MessageBox.Show("");
WaitHandle.WaitAll(eventArray);
//program wraps up
我没有收到任何错误消息,我已经为两个线程创建了日志,当我从命令行执行时,我看到它会写入日志中的第一行,但它只会在我需要10-12行时写入该行。我甚至看到程序在任务管理器中运行,但它似乎被卡住了。听起来你的信令EVET没有设置,所以
WaitAll
只是等待。我在返回值之前的方法末尾有一个.set()
,所以应该设置它。在使用调试器运行时,它也会完成。创建了一个虚拟应用程序,在其中我将youterrors=..
替换为justeventArray[0]。Set()
(对于其他回调中的其他事件也是如此)。它在调试和发布模式下都能正常工作。你能确认一下吗?行,但我需要那条线?这是我正在编写的程序的主要方法……无论哪种方法,我都会自动打开和关闭一个消息框。