2011-07-30 12 views
7

Mam dziwny problem z moim programem. Zajmuję się tworzeniem aplikacji formularza okna. Kiedy debuguję go za pomocą Visual Studio (F5) działa poprawnie, ale kiedy uruchamiam jego plik wykonywalny, zawiesza się i daje mi "Nieobsługiwany wyjątek typu" System.ObjectDisposedException "występujący w mscorlib.dll".Awaria programu z System.ObjectDisposedException

Próbowałem umieścić najwyższy poziom (w mojej najbardziej zewnętrznej funkcji) spróbować/złapać za uchwycenie tego wyjątku, ale mimo to program się zawiesza. Czego tu mi brakuje?

Nie wysłałem kodu, ponieważ musiałem przesłać cały kod, aby zobaczyć, gdzie jest problem.

+1

Problem polega na tym, że podczas debugowania GC nie zbiera obiektów, które są tak często usuwane. Gdzieś w kodzie próbujesz uzyskać dostęp do obiektu, do którego nie masz już prawidłowego odniesienia. Zostało usunięte. Nie da się dokładnie określić, gdzie bez jakiegoś kodu. –

+2

Jeśli próbuje uzyskać do niego dostęp, oczywiście musi mieć odniesienie do niego, a więc nie ma GC. –

Odpowiedz

3

Wow, ObjectDisposedException, który nie jest przechwytywany przez blok catchu najwyższego poziomu?

Nie jestem pewien, co zrobiłbym w tym przypadku - oczywiście, chcesz zobaczyć ślad stosu i dowiedzieć się, co to jest. Istnieje kilka wyjątków, w których nie można złapać okazji, ale ten nie jest jednym z nich. Prawdopodobnie dołączę program obsługi do zdarzenia AppDomain.UnhandledException i zobaczę, czy to coś.

3

Jeśli można uzyskać ślad stosu wyjątku, powinien pomóc w usunięciu przyczyny źródłowej. Pomocne może się okazać okno Stack Stack. Zapoznaj się z instrukcjami tutaj:

Możesz również wyłączyć opcję "Just My Code" do debugowania w Visual Studio. Może to dać lepsze informacje o debugowaniu wyjątków. Postępuj zgodnie z instrukcjami (aby wyłączyć) tutaj:

+0

Zaktualizowany link: [Jak: Przejdź do mojego kodu] (https://msdn.microsoft.com/en-us/library/h5e30exc (v = vs.100) .aspx) – OriolBG