我是一名CompSci學生,在C#上相當新穎,當時我正在爲一個類做一個「Josephus Problem」程序,並創建了一個Exit按鈕Application.Exit()隨時退出,但如果C#仍在繪畫並且按下按鈕,則會爲Graphics對象引發ObjectDisposedExeception。有什麼辦法可以防止這種情況發生?我正在考慮嘗試{}捕捉或更改布爾值,以告訴繪製過程在退出之前停止,但是我想知道是否有另一種解決方案。如何防止C#中的ObjectDisposedException在繪圖和應用程序退出時
1
A
回答
1
這不應該發生。如果該按鈕是在與窗口相同的線程上創建的,則它們共享一個消息泵,並且不會中斷Paint處理程序來處理退出按鈕。單擊該按鈕的消息將在線程的消息隊列中排隊,直到Paint處理程序返回。
通常,您應該將繪畫推遲到Paint處理程序(或覆蓋OnPaint)以及其他需要更新屏幕的其他位置,調用控件的Invalidate方法。這告訴Windows一個區域需要重新繪製,並且一旦處理完所有其他消息,它將生成一個WM_PAINT
消息,最終將調用OnPaint,這反過來將觸發Paint事件。
如果使用動畫,請使用System.Windows.Forms.Timer
來觸發每個幀,而不是使用線程。 System.Threading.Timer
回調在線程池中執行,所以它們總是在錯誤的線程上操作UI。
2
您應該被稱爲包含按鈕的窗體的Close()方法,以便按順序關閉窗體。無論如何,關閉主窗體都會導致應用程序退出。
相關問題
- 1. 如何防止用戶在按下後退按鈕時退出應用程序
- 2. 防止應用程序立即退出?
- 3. 防止nodejs應用程序退出
- 4. TideSDK防止應用程序退出
- 5. 如何在應用程序退出後防止genymotion回滾
- 6. 製表符和後退按鈕。如何防止用戶退出應用程序
- 7. 防止Cocoa文檔應用程序退出時的「退出時保存」對話
- 8. 防止退出按鈕退出科爾多瓦應用程序
- 9. 當應用程序意外退出時防止數據損壞
- 10. Ionic 2 - 防止退出應用程序硬件後退按鈕
- 11. 如何在用戶退出應用程序時停止音樂
- 12. 退出時終止應用程序
- 13. 如何防止用戶退出應用程序時藍牙連接丟失?
- 14. 如何在Flask應用程序退出時停止Gunicorn
- 15. 如何在瀏覽器退出時終止javafx應用程序
- 16. 當用戶在C++控制檯應用程序中輸入「退出」時,如何退出應用程序?
- 17. 如何防止Android碎片/活動中的意外應用程序退出?
- 18. 如何防止應用程序在Xcode的UI測試後自動退出?
- 19. 在Visual C++中退出應用程序
- 20. Cocoa登錄表可防止用戶退出應用程序
- 21. 如何在執行junit測試後防止java程序退出
- 22. 退出程序後如何防止控制檯輸出
- 23. 如何在Android應用程序退出後終止進程?
- 24. C#webservice和Android應用程序:如何防止非法訪問
- 25. 如何在MS Access中退出應用程序退出時的表單內容?
- 26. 如何終止正確的應用程序退出線程
- 27. 如何防止我的應用程序
- 28. 如何防止node.js應用程序中的會話溢出?
- 29. 在啓動應用程序時調用ContentProvider時 - 如何退出應用程序
- 30. 防止退出程序啓動後Emacs退出?