C# .NET6結束UI線程

在.NET6項目中,不再支持Thread.Abort:Thread.Abort is not supported and throws PlatformNotSupportedException.

原因是Thread.Abort可能導致資源泄漏,

1. 不正常的關閉,導致線程運行過程中待釋放資源的業務代碼,未能完成執行。

2. 異常捕獲,業務模塊未添加捕獲、業務模塊添加了捕獲但finally未執行。這也會引發其它不期望的模塊邏輯異常以及資源釋放問題。

Thread.Abort()被認爲是一種不安全的方法來終止線程,所以要找下其它的替代方案。

可以通過Dispatcher的BeginInvokeShutdown方法,來關閉UI線程:

1     public static void Close(this Dispatcher dispatcher)
2     {
3         dispatcher.BeginInvokeShutdown(DispatcherPriority.Normal);
4         dispatcher.Thread.Join();
5     }

調用Shutdown會讓Dispatcher停止處理消息隊列中的操作,並退出Dispatcher.Run消息循環,從而結束UI線程。

Thread.Join()可以等待UI線程結束,以確保Close的同步操作完成時,能滿足調用方立即結束UI線程的期望。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章