2009-12-02 116 views
0

我已經創建了一個.net 2.0窗口應用程序。此應用程序動態創建表單控件。現在,當我嘗試運行應用程序時,它會拋出一個異常「創建窗口句柄時出錯」。在此之後,應用程序就會掛起而沒有任何反應第一次,窗體得到正確顯示。在某個特定事件中,我試圖重新載入相同的表單,而那段時間我得到這個異常。任何人都知道如何擺脫這一點。 任何形式的幫助將會很棒:)創建窗口句柄時出錯

+0

發佈您的代碼。 '在一個特定的事件中,我試圖重新載入相同的表單,而那段時間我得到了這個異常。「聽起來你在事件處理程序中做錯了什麼。 – 2009-12-02 07:35:27

回答

0

我最近遇到了這樣的問題。

每個進程只有10,000個句柄的限制 - 如果您動態創建複雜的用戶界面,則很容易達到。

要檢查是否發生這種情況,請使用任務管理器 - 進入進程選項卡,打開「用戶對象」和「GDI對象」的列。然後,重現問題。

在我的情況下,USER對象的數量正好達到了10,000,然後「繁榮」。

如果這是您正在發生的事情,您需要確保在創建新表單之前妥善處理舊控件。您可能需要重新設計才能使用較少的手柄 - 這是我需要做的。

+0

嗨貝文, 感謝您的答覆。我檢查了我的代碼,正如你所說的那樣,所有的控件都沒有妥善處理。我在我的表單上使用了SplitterControl的異常。因此,它正在打破流動。 現在,我正在做的是,我只是收集集合對象中的所有控件並強制處置它們中的每一個。 這工作正常,但由於表單通過其dispose()方法處理,我不確定這是否是處理控件的最佳方式。 – 2009-12-04 05:44:40

+0

您需要確保您不會最終處理兩次控件;我建議使用Reflector來檢查'Control'的代碼,看看它的'Dispose()'方法是否通過從窗體中刪除控件來防止這種情況。 – Bevan 2009-12-04 07:23:35