2011-06-01 201 views
8

我認爲Application.Exit導致應用程序退出imemdiately,但我可以看到,根據下面的示例,它將在for循環結束後退出。此外,當這個命令將強制應用程序退出?App.Exit不會立即退出?

for (int I = 0; I < 1000; I++) 
{ 
    if (I == 1) 
     Application.Exit(); 
} 

回答

6

Application.Exit()將導致應用程序返回到基礎消息泵後退出。如果你在UI線程中運行的代碼,這會不會是,直到你從你在任何UI方法返回

9

正如你可以看到here,這種方法「通知所有消息泵必須終止」和「此方法不強制應用程序退出。」

2

MSDN(如按鈕單擊處理程序。):

通知內容所有消息泵必須終止,然後在消息處理後關閉所有應用程序窗口。

-

此方法不一定強制應用程序退出。 Exit方法通常在消息循環中調用,並強制Run返回。要僅退出當前線程的消息循環,請調用ExitThread。

1

檢查MSDN

exit方法停止所有線程所有正在運行的消息循環,並關閉應用程序的所有窗口。此方法不一定強制應用程序退出。 Exit方法通常在消息循環中調用,並強制Run返回。要僅退出當前線程的消息循環,請調用ExitThread。

3

問題「我現在怎麼退出?」如果是這樣,請使用Environment.FailFast - 這是最快的出路,作爲額外的獎勵,您可以在事件日誌中留下條目。由於它說MSDN

這種方法終止進程 沒有運行任何活動的try /終於 塊或終結。

故障快速轉移方法的消息 字符串寫入Windows應用程序 事件日誌,創建您的應用程序 的轉儲,然後終止 當前進程。郵件字符串爲 也包含在向Microsoft提供的 錯誤報告中。

使用FAILFAST方法,而不是 退出方法來終止您 應用程序如果您 應用程序的狀態被損壞無法修復, 和執行應用程序的 的try/finally塊和終結將 腐敗的節目資源。

+0

請注意,FailFast本質上等同於強制進程從任務管理器關閉,並會導致顯示經典的醜陋Windows錯誤消息。它只能在極端情況下使用(例如UI線程死鎖)。 – 2011-06-01 15:25:50

+0

@丹 - 同意,這是一個很好的投擲你的手中的空氣和保釋技術,當有人點擊退出按鈕時不會運行。測試WER或重啓/恢復代碼也很棒。 – 2011-06-01 15:27:46