2013-02-19 93 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(); 
}