事件队列无法正常工作winforms

时间:2011-07-19 13:03:46

标签: c# .net winforms multithreading showdialog

假设主形式A和模态对话框B。

我从一个线程(使用invoke)启动B作为模式对话框。该对话框已正确显示,并使用ShowDialog(parent)启动,其中parent是表单A。

当我关闭B时,主对话框A没有正确响应某些事件,例如鼠标点击。此问题仅在以下情况下重现:

  • 使用.NET framework 1.1 profile
  • 编译代码
  • 代码在Windows 7 x64计算机中执行

关闭对话框后,会出现以下症状:

  • 表单A不响应某些鼠标点击,但响应鼠标移动(鼠标移动时突出显示按钮)。
  • 主窗口关闭按钮在鼠标悬停时突出显示,也可以单击,但表单未关闭。
  • 新的模态对话框不再是模态的。
  • 具有属性StartPosition=CenterParent的对话框未居中,它们显示在屏幕的左上角。

我无法在其他机器上重现该问题。此外,如果我使用.NET 2.0或更高版本编译代码,则不会重现该问题。

有任何解决此问题的建议吗?我的申请需要1.1。我可以执行任何恢复事件队列的调用吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

好吧最后这是一个线程问题。我在一个线程之外更改了调用代码并且它有效。

这很烦人,因为有时候我们需要从一个线程显示这个对话框,但在.NET 1.1和x64机器的情况下,似乎在调用和多线程方面存在一些麻烦。

在任何情况下,如果代码是使用.NET 2.0或更高版本编译的(因此在真正的x64中工作),问题就消失了。