C# ThreadPool.QueueUserWorkItem能否在主线程上执行?

C# ThreadPool.QueueUserWorkItem能否在主线程上执行?,c#,silverlight,macos,threadpool,queueuserworkitem,C#,Silverlight,Macos,Threadpool,Queueuserworkitem,我试图在多线程应用程序中解决Mac上SL的一个奇怪问题。我的应用程序使用线程池对各种不同的工作项进行排队。我有一个方法HandleRequest,它只能通过ThreadPool.QueueUserWorkItem(newwaitcallback(HandleRequest))调用 应用程序运行非常缓慢,所以我从Windows远程调试并暂停它,以发现许多线程卡在HandlerRequest中,因为它们等待的资源有限。这很好,因为还有另一个问题,但我也注意到在主线程中有一个HandleRequest

我试图在多线程应用程序中解决Mac上SL的一个奇怪问题。我的应用程序使用线程池对各种不同的工作项进行排队。我有一个方法
HandleRequest
,它只能通过
ThreadPool.QueueUserWorkItem(newwaitcallback(HandleRequest))
调用

应用程序运行非常缓慢,所以我从Windows远程调试并暂停它,以发现许多线程卡在HandlerRequest中,因为它们等待的资源有限。这很好,因为还有另一个问题,但我也注意到在主线程中有一个HandleRequest正在等待。怎么会这样?我认为ThreadPool在后台创建了工作线程并在其上执行任务


发生这种情况是因为线程池已用完工作线程,因此正在使用调用线程尝试并执行回调方法吗?

ThreadPool
为工作项处理创建独立的线程集。主线程上的调用堆栈应该告诉您调用它的来源。
HandleRequest
方法是否有任何
Dispatcher.Invoke
调用?此类调用将始终在主线程上同步执行。@Douglas
HandlerRequest
的状态对象包含一个回调,该回调可能包含
Dispatcher.Invoke
调用。我想这就是为什么工作项被安排在主线程中。。。因为我在HandleRequest的末尾执行了回调,是的,这是一个可能的解释。在
Dispatcher.Invoke
调用期间,工作线程被阻塞,并且(执行)控制权转移到主线程。当
Invoke
委托完成时,控制权传回工作线程。