如何确保winform在X秒内完成关闭

Geo*_*uer 0 multithreading timer winforms

在我的WinForms应用程序中,我需要弹出一个小的自定义对话框,在屏幕上停留X秒,然后消失.因此,一旦经过了适当的时间,我就使用System.Threading.Timer来调用_dialog.Close()方法.这当然意味着我必须完成整个"if InvokeRequired BeginInvoke"舞蹈,这不是一个真正的问题.

然而,问题是我的主要线程可能是关闭做上帝知道什么时候调用BeginInvoke.它可能无法绕过关闭窗口很长一段时间.我不需要窗口以毫秒的速度关闭,但是在一秒左右的时间内确实是必要的.

所以我的问题是BeginInvoke如何实际进入主线程,我怎样才能解决这个奇怪的限制呢?

Jon*_*eet 5

如果您的UI线程一次忙碌很多秒,那么:

  • 您将无法关闭与该UI线程关联的窗口,而无需通过Application.DoEvents调用来编写代码(一个坏主意)
  • 在此期间,您的整个用户界面将无法响应.用户将无法移动任何应用程序的窗口,并且如果用户将其他窗口拖到其上方并再次关闭,则当UI等待重新绘制时,您将最终得到一个丑陋的混乱.

当然System.Windows.Forms.Timer,System.Threading.Timer为了简单起见,请使用a 而不是a ,但更紧迫的是,修复代码以避免拥有如此繁忙的UI线程.