我是一名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. 如何在應用程序退出後防止genymotion回滾
- 3. 防止退出按鈕退出科爾多瓦應用程序
- 4. Ionic 2 - 防止退出應用程序硬件後退按鈕
- 5. 如何在用戶退出應用程序時停止音樂
- 6. 如何防止用戶退出應用程序時藍牙連接丟失?
- 7. 如何防止應用程序在Xcode的UI測試後自動退出?
- 8. 在Visual C++中退出應用程序
- 9. 如何在執行junit測試後防止java程序退出
- 10. 退出程序後如何防止控制檯輸出
- 11. 如何在Android應用程序退出後終止進程?
- 12. C#webservice和Android應用程序:如何防止非法訪問
- 13. 如何終止正確的應用程序退出線程
- 14. 如何防止node.js應用程序中的會話溢出?
- 15. 如何防止我的應用程序
- 16. 正在退出C應用程序
- 17. 如何在Objective-C應用程序中退出?
- 18. 如何在C#中強制退出應用程序?
- 19. 如何防止OpenGL應用程序繪製?
- 20. 如何在VS 2010中停止調試時正常退出ASP.NET應用程序?
- 21. MessageBox阻止從應用程序退出
- 22. 防止應用程序在中間離開文件操作並退出
- 23. 如何在使用TAB完成時防止git退出?
- 24. 防止UIAlertView退出
- 25. 防止Excel退出
- 26. 防止Paramiko退出
- 27. 如何在使用阻止呼叫時退出程序
- 28. 應用程序在發佈時退出
- 29. 在應用程序崩潰時退出
- 30. 如何退出Windows Phone 7.8應用程序中的循環和應用程序?