2013-12-23 44 views
-2

我遇到了這個問題,其中有一個非常大的窗體(winforms)通過Activation.CreateInstance(Type)方法加載,因爲加載容器用於不同的表單。它第一次打開罰款,但如果我關閉它然後重新打開它,它將總是在通過InitializeComponent()方法中途崩潰,在那裏它跳轉到Dispose()方法,崩潰在NullReferenceException第二次打開時出現大表格崩潰

我目前的理論是,Dispose()電話是從沒有完成的時間,目前正設法處置當前表單形式的一個實例。 (這是否有意義?)另一方面,我認爲這可能是導致問題的Activation.CreateInstance(),但這是我第一次看到這個類,所以我不太確定。

我今天早些時候在調試的時候做了一個測試,如果我在崩潰的InitializeComponent()的每一行上等了幾秒鐘,我就沒有犯錯。

+0

爲什麼不只是'隱藏'而不是'close'?如果你的「處置」理論是正確的,那應該沒問題。 – KSdev

+0

我試過'隱藏'而不是'close',但它仍然崩潰。有什麼方法可以知道一個對象是否正在處理,並阻止UI重新打開表單直至完成? –

+1

你能提供樣本代碼嗎? – Grundy

回答

0

最後,我發現了錯誤的根源:加載表單有幾百個網格,上面有幾個工具欄,每個工具欄上都有5-6個圖標。而且,資源管理器有點愚蠢,而不是每次重複使用相同的圖標(工具欄是同一個用戶控件的實例),它每次都會實例化一個新的位圖,而且內存不足。但是,它並沒有因爲明顯的錯誤而失敗,而是將它鬆動並開始處理調用對象,因此處置不完全創建的對象。所以這裏的解決方案是確保在使用資源管理器時只加載一次圖像。它不僅可以解決崩潰問題,而且加載速度也更快。

相關問題