我是一名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应用程序中的循环和应用程序?