在我的应用程序中,我创建了一个在Bitmap
对象上绘制的线程,当它完成绘制时,它调用form.Invoke(form.Refresh)
将位图绘制到主窗体。(form
作为我申请的主要形式的参考。)
问题:我注意到,如果我在另一个线程等待来自 UI 线程的回调消息(因为Invoke
调用)时关闭表单 - 线程将无限期等待(?)并且基本上会卡住,阻止应用程序从关闭。
在我的程序中使用BeginInvoke
没有意义,因为刷新表单所需的时间必须在线程的工作中考虑。
问:防止这种情况发生的最好方法是什么?
编辑:我在某些地方读到这是一个坏主意,但在我看来,处理这个问题的唯一方法是调用Thread.Abort()
. 我不能通过使用标志或类似的东西来关闭线程,因为它只是停留在Invoke
调用中。
编辑2:为了清楚起见,我正在寻找一种告诉工作线程它应该停止等待Invoke
回调并继续工作的方法。