0

古いCOMコントローラーから非常に古いサードパーティのソフトウェアドライバーまで、x86にコンパイルする必要のあるアプリケーションがあります。

他のアプリケーションがフォーカスを持っているときにフォームのモーダルダイアログボックスを呼び出すと(ステップスルーしている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)からこの動作に気づきましたか?そうでない場合は、他の場所のコードで何か厄介なことが起こっている必要があります。

それを「修正」する方法はありますか?

4

1 に答える 1

1

VS2010 のデフォルトは x86 であるため、構成は非常に一般的であり、コードで何かおかしなことが起こっていることを示唆しています。

これは dlg.ShowDialog(this) のように実際には親であり、表示されていると確信していますか?

Locate は非 UI スレッドから呼び出されていますか? そうでない場合は、dlg.ShowDialog() を使用してみましたか。

于 2012-08-14T18:18:07.857 に答える