2012-04-03 49 views
4

我的WPF應用程序由一個主窗口組成,而主窗口又有一個子窗口。爲什麼從子窗口使用FolderBrowserDialog時會出現System.ComponentModel.Win32Exception?

如果我讓子窗口打開一個FolderBrowserDialog,我得到一個System.ComponentModel.Win32Exception(WindowsBase.dll中發生類型'System.ComponentModel.Win32Exception'的第一個機會異常)。更具體地說,這發生在關閉對話框之後,並且子窗口再次獲得焦點(?)時。問號在那裏,因爲我沒有成功捕捉異常,所以我不能100%確定。但在視覺上,就是它發生的時間。如果在關閉對話框後子窗口具有焦點,則在窗口失去焦點並重新獲得焦點後發生異常。

如果我將打開folderBrowserDialog的代碼移動到主窗口,這不會發生。 ***編輯:現在它也從主窗口崩潰的程序。

爲什麼我會得到這個異常?發生什麼事?我怎樣才能解決它(除了將它移動到主窗口)?

這裏是打開對話框的代碼;沒什麼特別。異常代碼被刪除。

FolderBrowserDialog dlg = new FolderBrowserDialog();   
DialogResult result = dlg.ShowDialog(); 

if (result == DialogResult.OK) 
    selDir = dlg.SelectedPath; 

我使用VS2010,.NET 4

+1

[FolderBrowserDialog - Win32Exception發生 - 參數不正確]的可能重複(http://stackoverflow.com/questions/3438985/folderbrowserdialog-win32exception-occurred - 參數是不正確的) – 2012-04-03 12:22:32

回答

5

關於「第一次機會異常」位聽起來像你看到的是在調試器,也聽起來像是你已經啓用了「歇在調試>異常中引發異常「。使用該設置,即使在調用堆棧的某個位置已經有一個catch塊(即,即使它不會實際上導致程序崩潰),也會在拋出異常時立即進入調試器。這聽起來像是你看到一個異常被拋出,然後立即被框架捕獲 - 所以從你的角度來看,這是一個誤報。

嘗試在沒有調試器的情況下運行你的程序(「Run without debugging」菜單項,或者只需在Explorer中雙擊你的EXE),看看程序是否真的崩潰。如果沒有,那麼你知道這是一個誤報 - 在這一點上,你可能想要進入Debug> Exceptions並取消選中「Thrown」列中的方框,這樣你就不會再受到這種事情的困擾。 (由於這個原因,默認情況下,「Thrown」列未被選中。)

+0

好主意!我沒有想過嘗試。測試結果:不幸的是程序在沒有調試的情況下運行時會凍結。真的很刺激。我非常希望能夠取消某些例外情況。 – AnnaR 2012-04-05 07:26:59

+0

我只有在調試模式下有同樣的問題,並且在沒有調試的情況下運行時應用程序工作正常。但即使我沒有選中所有的框,我仍然無法在調試模式下運行它。並獲得相同的例外。你有什麼建議嗎? – IBRA 2016-06-15 11:39:20

相關問題