我在C#/ Windows Forms中有一个项目,我有一个带有PictureBox
的简单表单,我从后台线程中绘制图像。如果我在绘图处于活动状态时关闭表单,则后台线程在尝试执行调用以更新位图时会崩溃,这是非常合乎逻辑的。我尝试使用析构函数等待的AutoResetEvent
,这样析构函数就不会返回,直到完成所有绘图并且后台线程知道它应该退出。但我得出结论,崩溃发生在析构函数执行之前所以我开始怀疑,表单的组件在什么时候被销毁?我假设在析构函数之前?那么等待绘图完成的安全场所是什么?覆盖Dispose()
并在那里进行?
答案 0 :(得分:0)
这就是我想的,在Designer文件中已经存在Dispose(bool disposing)
方法,例如MainForm.Designer.cs
。
我会在该方法的开头放置一些代码来关闭/完成后台线程。 AutoResetEvent
或ManualResetEvent
是一种很好的方式。