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

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

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

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

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

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