我剛剛繼承了一個使用生產者 - 使用者模式的c#4.0 WinForms應用程序(基本上只是一個小儀表板)。我的消費者任務(字面上是System.Threading.Tasks.Task)正在處理隊列中的數據。當用戶想要關閉應用時,生產者(TCP套接字服務器)立即停止。但是,隊列可能不是空的,因此我需要給用戶立即退出的選項,或者消費者任務完成處理所有排隊數據後立即退出。如果用戶想要等待消費者任務完成,那麼UI自然需要保持響應。我遇到的問題是,因爲退出應用程序的代碼駐留在「退出」按鈕的單擊事件處理程序中,所以我可能需要等待消費者任務完成,而我處於單擊事件處理程序中。概括地說,事件處理程序包含這一(非常難看)代碼:.NET在等待任務完成時使應用程序保持活動狀態
// loop while there is still data in the queue
while (QueuedData.Count > 0)
{
Application.DoEvents(); // UI is semi-responsive but with a lot of CPU utilization)
}
// the queue is empty so now exit the application
任何人都可以提出讓我沒有停留在緊密循環的事件處理程序內的UI實現該功能的另一種方式線?在此時啓動另一個線程/任務來處理此檢查,然後關閉該線程中的應用程序會有什麼意義嗎?非常感謝!
感謝您的建議,用戶可以選擇等待強制關閉。我決定實施它。 – user685869 2011-04-13 12:57:44