从线程触发时,C#ShowDialog()不会阻止主窗体

时间:2014-02-10 14:49:21

标签: c# multithreading winforms

我有一个带有主窗体和几个后台线程的Windows窗体应用程序。为了显示“好”的消息,我实现了一个表单,使用ShowDialog()显示为模式对话框。

ShowDialog()的所有调用都是在主窗体的表单级别上实现的(而不是在线程级别上),但有时我会从一个线程触发一个事件,该事件将在主窗体的表单级别上处理。在这些情况下,对话框不再是模态的...主窗体不会被阻止。当没有从线程触发对ShowDialog()的调用时,它根据需要是模态的。

如何确保每次调用ShowDialog()都会阻止主窗体?

1 个答案:

答案 0 :(得分:8)

  

如何确保每次拨打ShowDialog()都会阻止主表单?

在主线程上执行对ShowDialog()的调用。如果需要从其他线程调用它们,请使用Invoke()在主线程上运行它们。