2013-02-19 96 views
0

我有一个启动微型服务器类型的服务来为本地浏览器提供网页的胜利表格,现在的问题是,当我启动它时,应用程序显然不会运行,因为存在一个等待请求的循环,对于创建新线程的每个请求。现在我应该为整个过程创建一个完整的新线程,还是有另一种方式?该类在我创建的单独的dll文件中。完全按预期完美工作。在后台运行课程

回答

1

我建议你去看看ThreadPool Class不使用循环。这是一个易于使用的选项,用于处理多个线程:

通过为应用程序提供由系统管理的工作线程池,可以更高效地使用线程池。

要排队等待执行的方法简单地使用QueueUserWorkItem Method

ThreadPool.QueueUserWorkItem(state => 
{ 
    // do some work! 
}); 

如果你意识到你需要更积极的并发线程来服务你的客户,请拨打SetMaxThreads Method

ThreadPool.SetMaxThreads(50, 10); 

对于工作线程和I/O线程,高于这些数字的所有请求都保持排队,直到线程池线程可用。

1

我会按照@Thomas的建议,但将waitHandles添加到您的ThreadPool来管理回调循环。

WaitCallback classMethod1= new WaitCallback(DoClassMethod1); 
bool isQueued = ThreadPool.QueueUserWorkItem(classMethod1, waitHandle[0]); 

WaitCallback classMethod2= new WaitCallback(DoClassMethod2); 
bool isQueued = ThreadPool.QueueUserWorkItem(classMethod2, waitHandle[1]); 

// do this if you want to wait for all requests complated 
if (WaitHandle.WaitAll(waitHandles, 5000, false)) 
    // request completed, show your result. 
else 
    // problem. 

void DoClassMethod1(object state) 
{ 
    // do your work 
    ManualResetEvent mre = (ManualResetEvent)state; 
    mre.Set(); 
}