2011-11-01 74 views
18

我有一個多線程的C#應用​​程序,它具有讀寫器鎖定,但它在某些計算機上發出超時異常(無法及時獲取鎖定),我需要強制關閉所有線程。 我如何做到這一點沒有得到任何額外的例外?如何在C#中強制退出應用程序?

+4

'Environment.FailFast(int)'會盡快殺死你的應用程序。 – vcsjones

+0

可能重複http://stackoverflow.com/questions/1057151/application-exit – angularsen

回答

12

Environment.FailFast可能是你在找的東西,但要小心副作用:不要終結器,最後是塊或其他任何東西運行。它確實會終止NOW

+1

好的,我用它,它給了我這個例外: 運行時遇到了一個致命的錯誤。錯誤的地址是0x044f07bd,線程0xfb0。錯誤代碼是0x80131623。此錯誤可能是CLR中的錯誤,也可能是用戶代碼中不安全或不可驗證的部分。此錯誤的常見來源包括COM-interop或PInvoke的用戶編組錯誤,這可能會破壞堆棧。 – armin

+1

值得一提的是Environment.Exit的選項。它們都保證立即退出,但Exit不會生成系統事件錯誤事件並運行try/finally終結器。 – angularsen

4

,強制退出應用程序儘快與您可以使用Environment.FailFast()

15

如果你想殺死程序而不從系統的任何異常消息,例如致命錯誤後,您可以使用:

Process.GetCurrentProcess().Kill() 
+0

我用過這個,它工作,謝謝。 – Jeremy

13

我想迫使應用程序退出的最佳解決方案是使用下面的代碼行:

Environment.Exit(0) 

Envrironment.FailFast()與結束運行時異常。

+1

謝謝 - 這對我來說最合適,因爲我想避免例外。 – stuzor

0

此,如果你正在尋找一個純C#代碼終止您的應用程序可能是答非所問,但您可以使用終止進程,如taskkill命令,該命令將終止確保您的應用程序的系統的原生形態。

試試看。首先添加系統參考。

using System.Diagnostics; 

無論你需要終止進程,

String process = Process.GetCurrentProcess().ProcessName; 
Process.Start("cmd.exe", "/c taskkill /F /IM " + process + ".exe /T"); 
  • /F - 強制終止。
  • /T - 終止進程樹(進程和由其啓動的任何其他進程)。
  • /IM - 圖像名稱或進程名稱。
相關問題