2012-08-14 72 views
0

我有一個應用程序必須編譯爲x86,因爲一些舊的COM控制器對於很老的第三方軟件驅動程序。ShowDialog編譯爲x64顯示在主窗體後面的x64

我注意到,任何時候我所說的窗體的模態對話框,而另一些應用程序具有焦點(像我踩着通過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)的這種行爲?如果沒有,那麼我必須在我的代碼中有其他地方發生一些扭曲的事情。

有沒有辦法「修復」它?

+0

這是什麼?定位'Locate'方法在哪裏?它在我看來像是你錯誤地獲得了模態對話的所有權。 – 2012-08-14 19:33:35

回答

1

VS2010默認爲x86,所以你的配置非常常見,這表明你的代碼有些東西會變得麻木。

你確定在dlg.ShowDialog(這)實際上是家長和可見等?

是否從非UI線程調用Locate?如果沒有,你嘗試使用dlg.ShowDialog()。

+0

我交換了我的''''對象,大約一半的表單看起來效果更好!當我重寫[Installer class]時,你不會知道如何做同樣的事情來顯示[MessageBox](http://msdn.microsoft.com/en-us/library/system.windows.messagebox.aspx) (http://msdn.microsoft.com/en-us/library/system.configuration.install.installer.aspx),你會嗎? – jp2code 2012-08-14 20:36:30

+0

在任何InstallerClass例程中都沒有真正使用MessageBoxes,但我希望標準調用(例如MessageBox.Show(message,caption,buttons))能夠正常工作 - 除非您在安裝例程中執行諸如運行後臺線程。如果是這樣,並且您確實知道父窗口句柄,則可以使用顯示(窗口,消息,標題,按鈕)等重載。 – sgmoore 2012-08-15 10:56:25