2012-02-05 64 views
2

我使用C#(如果有差別),我有下面的代碼片段在Visual Studio 2008中寫:saveFileDialog隴上「好」確認等待

if(saveFileDialog1.ShowDialog() == DialogResult.OK) 
{ 
    //Write Stuff to File Here 
} 

有一段時間,我想我編寫這個文件的代碼是永久存在的,但是在調試時,它似乎需要永久(5到10秒)才能在if語句和「if」中的第一個代碼的第一個括號之間步入。

有什麼我做錯了嗎?在UI中創建saveFileDialog對象與在動態創建它(通過代碼)之間是否有區別?如果沒有「其他」陳述,它會有所作爲嗎?

任何想法或想法將不勝感激!

+0

'saveFileDialog1'是什麼類型? – BrokenGlass 2012-02-05 21:50:36

+0

您是否已經在機器上映射了網絡驅動器?如果是這樣,並且它們很慢或斷開連接,那麼在下面創建「保存文件」對話框的Win32 API可能需要比平時更長的時間。 – 2012-02-05 22:02:43

+0

@BrokenGlass:我不確定「type」是什麼意思。它是System.Windows.Forms.SaveFileDialog。 @ Mike:我所有的網絡驅動器都已連接。如果我必須(以某種方式)將saveFileDialog縮小到它們的C:/ Drive – Demasterpl 2012-02-06 15:29:54

回答

1

這並不罕見,在許多機器上,當您使用該對話框時,大量的DLL會加載到您的進程中。您可以使用Project + Properties,Debug選項卡查看它們是否已加載,請勾選「啓用非託管代碼調試」複選框。 「輸出」窗口顯示每個DLL的痕跡,這些DLL會蠕動到您的程序中。

這些是外殼擴展,Explorer的自定義。您使用的對話框是一個外殼對話框,您肯定會認識到與常規資源管理器視圖的相似性。像圖標和上下文菜單的行爲是相同的。在開發人員的機器上安裝了大量的shell擴展,這比用戶機器更常見。其中有很多這樣的內容,提供了諸如將任何你喜歡的工具集成到資源管理器本身的便利。

調試問題並不是那麼容易,你不會有這些擴展的實際源代碼。您可能會從輸出窗口中的跟蹤中獲得關於麻煩製造者的提示。如果在一個特定的DLL之後有很長的停頓,那麼這個DLL就是問題的根源。儘管如此,沒有什麼可靠的

更好的方法是使用SysInternals的AutoRuns實用程序。它顯示了你正確安裝了哪些shell擴展,並允許你通過簡單地點擊一個複選框來禁用它們。開始禁用任何不具有Microsoft版權的內容,以及無法使用的內容。需要註銷+登錄才能使更改生效。

+0

因此,如果我正確地理解了你,那是因爲我的計算機很好地被攻擊了?檢查「啓用非託管代碼調試」複選框帶來了一個「安全」彈出窗口幾乎告訴我「不」。我不能讓這個彈出窗口再次出現。 – Demasterpl 2012-02-06 16:21:07

+0

是的,「gunk」在這裏是合適的詞。 – 2012-02-06 16:30:21