为x86编译的ShowDialog在x64上显示在主窗体后面

时间:2012-08-14 16:55:21

标签: c# visual-studio-2010 x86 64-bit

我有一个必须编译到x86的应用程序,因为有一些旧的COM控制器和很老的第三方软件驱动程序。

我注意到,任何时候我调用Form的模态对话框,而其他一些应用程序有焦点(就像我正在逐步完成的Visual Studio代码),那个对话框是后面的窗口。

private string Locate(string filename) {
  if (!File.Exists(filename)) {
    using (OpenFileDialog dlg = new OpenFileDialog()) {
      dlg.FileName = filename;
      if (dlg.ShowDialog(this) == DialogResult.OK) {
        return dlg.FileName;
      }
    }
  }
  return filename;
}

我可以将应用程序编译为x64,但加载COM驱动程序将失败,导致应用程序永远无法启动。

是否有其他人(Visual Studio,.NET Framework或Windows 7)注意到此行为?如果没有,那么我的代码必须在其他地方搞砸了。

有没有办法“修复”它?

1 个答案:

答案 0 :(得分:1)

VS2010默认为x86,所以你的配置很常见,这表明你的代码确实有些麻烦。

您确定dlg.ShowDialog(this)中的 this 实际上是父级并且可见吗?

是否从非UI线程调用了Locate?如果没有,你是否尝试使用dlg.ShowDialog()。