Problem z Winforms-Błąd tworzenia uchwytu okna [duplikat]

To pytanie ma już odpowiedź tutaj:

Widzimy ten błąd w aplikacji Winform. Czy ktoś może pomóc, dlaczego widzisz ten błąd, a co ważniejsze, jak go naprawić lub uniknąć.

System.ComponentModel.Win32Exception: Error creating window handle.
   at System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)
   at System.Windows.Forms.Control.CreateHandle()
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.OnVisibleChanged(EventArgs e)
   at System.Windows.Forms.ButtonBase.OnVisibleChanged(EventArgs e)
Author: Yi Jiang, 2008-10-21

10 answers

Czy uruchomiłeś Process Explorer lub Menedżera zadań Windows, aby spojrzeć na obiekty GDI, Uchwyty, wątki i Obiekty użytkownika? Jeśli nie, wybierz te kolumny, które mają być wyświetlane (Menedżer zadań wybierz Widok->Wybierz kolumny... Następnie uruchom aplikację i spójrz na te kolumny dla tej aplikacji i sprawdź, czy jedna z nich rośnie naprawdę duża.

Może być tak, że masz elementy interfejsu użytkownika, które myślisz, że są wyczyszczone, ale nie zostały usunięte.

Oto link o tym to może być pomocne.

Powodzenia!

 46
Author: itsmatt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-21 18:06:09

Limit uchwytów systemu windows dla Twojej aplikacji wynosi 10 000 uchwytów. Otrzymujesz błąd, ponieważ twój program tworzy zbyt wiele uchwytów. Musisz znaleźć wyciek pamięci. Jak zasugerowali inni użytkownicy, użyj profilera pamięci. Używam również. Net Memory Profiler. Upewnij się również, że wywołujesz metodę dispose w kontrolkach, jeśli usuwasz je z formularza przed zamknięciem formularza (w przeciwnym razie kontrolki nie będą usuwać). Musisz również upewnić się, że nie ma żadnych zdarzenia zarejestrowane w kontroli. Sam mam ten sam problem i pomimo tego, co już wiem, nadal mam pewne wycieki pamięci, które nadal mi umykają..

 22
Author: mjezzi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-30 18:43:58

Zobacz Ten mój post o "Error creating window handle" i jak odnosi się do obiektów użytkownika i sterty pulpitu. Dostarczam kilka rozwiązań.

 11
Author: Fabrice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-08 00:35:37

Ten problem jest prawie zawsze związany z liczbą obiektów GDI, liczbą obiektów użytkownika lub liczbą uchwytów i zwykle nie z powodu braku pamięci na komputerze.

Kiedy śledzę jeden z tych błędów, otwieram ProcessExplorer i obserwuję kolumny: Uchwyty, wątki, obiekty GDI, obiekty użytkownika, prywatne bajty, Rozmiar wirtualny i zestaw roboczy.

(z mojego doświadczenia wynika, że problemem jest zwykle wyciek obiektu spowodowany przez obsługę zdarzeń trzymającą obiekt i zapobiegającą od usunięcia.)

 5
Author: AlfredBr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-08 20:02:27

Cóż, w moim przypadku to zdecydowanie obiekty użytkownika były poza kontrolą. Spojrzałem w Menedżerze Zadań systemu Windows i na pewno liczba obiektów użytkownika wynosiła dokładnie 10'000.

Dynamicznie osadzam właściwości i arkusze listy na stronach kart, ustawiając właściwość nadrzędną Właściwości lub panel kontenera arkusza listy na Właściwość strony Kart. Warunkowo poddaję recyklingowi lub odtworzę formularze własności i arkuszy list w zależności od rodzaju wystawianej kolekcji lub typ klasy kontrolowanego obiektu.

NB: w Delphi wszystkie kontrolki miały właściciela i własność nadrzędną. Nawet jeśli zmieni się własność nadrzędną kontroli, nadal będzie ona usuwana przez jej właściciela, gdy kontrola posiadania zostanie zniszczona.

W C# wydaje się, że jeśli kontrolka np. Panel jest programowo przypisana z np. formularza do strony tabulacji poprzez zmianę Panelu.Właściwość nadrzędna, wywołanie Dispose () w formularzu nie spowoduje usunięcia panelu, podobnie jak wywołanie Sterowanie.Clear () na stronie zakładki. Nawet bezpośrednie połączenie.Dispose () w rzeczywistości go nie usunie, chyba że jego rodzic zostanie wcześniej ręcznie ustawiony na null.

 2
Author: kingsley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-18 12:38:47

Wydaje mi się, że zwykle jest to związane z komputerem, który nie ma pamięci, więc nie jest w stanie stworzyć więcej klamek okiennych. Normalnie windows zaczyna również wykazywać dziwne zachowanie w tym momencie.

 1
Author: AtliB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-21 17:13:34

Dodałem czek, który sprawia, że działa...

if (_form.Handle.ToInt32() > 0)
{
   _form.Invoke(method, args);
}

To zawsze prawda, ale forma rzuca błąd bez niego. BTW, mój uchwyt to około 4,9 miliona

 1
Author: xlthim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-21 19:32:03

Mam ten sam błąd w aplikacji.Ładuję wiele kontrolek w jednym page.In przycisk kliknij Zdarzenie czyszczę elementy sterujące.wyczyszczenie kontrolek nie zwalnia kontrolek z memory.So pozbądź się elementów sterujących z pamięci. Właśnie skomentowałem sterowanie.metoda clear () I zawierać kilka linii kodu do usuwania kontrolek. Coś takiego

Dla każdego ctl jako sterowania w controlcollection

Ctl.dispose ()

Następna

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-01 19:10:53

Zdecydowanie za dużo uchwytów (problem z wyciekiem pamięci):

SYSTEM.ComponentModel.Win32Exception: Błąd tworzenia uchwytu okna

 0
Author: user344760,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-29 15:41:08

Sugestia out of memory nie wydaje się złym tropem.

Co robi twój program, że dostaje ten błąd?

Czy tworzy wiele okien lub kontrolek? Czy tworzy je programowo, a nie w czasie projektowania? Jeśli tak, czy robisz to w pętli? Czy ta pętla jest nieskończona? Czy zużywasz oszałamiające pokłady pamięci w inny sposób?

Co się dzieje, gdy oglądasz pamięć używaną przez aplikację w Menedżerze Zadań? Does it skyrocket to the moon? Albo jeszcze lepiej, jak sugerowano powyżej, użyj monitora procesu, aby zagłębić się w szczegóły.

 -2
Author: rice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-21 18:11:55