這個彈出的視窗是 Windows 作業系統的內建保護機制(通常稱為「程式沒有回應」視窗)。當 C# 程式的主執行緒(UI 執行緒)被耗時的工作卡住超過 5 秒時,系統就會認定程式當掉而跳出這個提示
如果要維持現有的 C# 程式流程不變,同時希望它在忙碌時不要跳出「關閉或繼續等待」的提示視窗,並且呈現像 Windows 7 那樣「視窗反白、滑鼠轉圈圈」 的單純當掉狀態,這可以透過修改作業系統的「視窗鬼隱機制」(Window Ghosting)來達成。
Windows Vista/7 開始引入了 Window Ghosting 機制:當程式主執行緒卡死超過 5 秒,系統桌面管理員(DWM)就會在原視窗上方覆蓋一個「鬼隱視窗(Ghost Window)」,這就是造成 Windows 10/11 彈出「沒有回應、關閉或等待」視窗的元兇。 [1]
只要關閉 Ghosting 機制,Windows 就會完全放任這個 C# 程式卡死,表現出來的現象就會是您想要的:畫面反白、滑鼠變成藍色轉圈圈,但系統絕對不會跳出任何詢問視窗干擾使用者。
在 C# 初始化中加入一行 API 指令(最推薦)
這個方法完全不會影響、也不會變更您現有的程式邏輯與流程。您只需要在程式最一開始啟動的地方(進入長循環或忙碌流程之前),呼叫 Windows 底層的
DisableProcessWindowsGhosting() 函式。
沒有留言:
張貼留言