2012-05-22 16 views
6

Podczas zamykania aplikacji .NET CF 3.5 na komputerze Motorola MC3100 (tylko wersja CE 6.0) pojawia się komunikat o błędzie "Aplikacja xxx napotkała poważny błąd i musi się zamknąć ". Następnie muszę rozgrzać urządzenie, aby aplikacja działała ponownie.CE 6.0/.NET CF 3.5 Aplikacja napotkała poważny błąd (MC3100)

Ten kod działa poprawnie do momentu zamknięcia aplikacji i kończy się niepowodzeniem, jeśli w sterowaniu w aplikacji jest ustawiona czcionka. Wszystko działa również dobrze na .NET CF 2.0 i wszystkich innych urządzeniach Motorola, Intermec, Psion, HHC, które wypróbowałem z .NET CF 3.5.

Tu jest mój bieżący kod testowy:

[MTAThread] 
static void Main() 
{ 
    Control oCtrl = new Control(); 
    oCtrl.Font = new System.Drawing.Font("Tahoma", 10F, System.Drawing.FontStyle.Bold); 

    // Setting the controls font to null works 
    // oCtrl.Font = null; Works 

    // Setting the Control to null does not work, still get error 
    // oCtrl = null;  Doesn't work 

    // Setting a font, not on a control, also works fine. 
    // System.Drawing.Font font = new System.Drawing.Font("Tahoma", 10F, System.Drawing.FontStyle.Bold); 
} 

Widziałem kilka linków, które wydają się związane:

Ale jak dotąd jedyne zalecenie, które znalazłem, to wyeliminowanie czcionek w aplikacji. W tym przypadku jest zbyt wiele miejsc, w których ustawione są czcionki, w tym połączone zespoły, że byłoby to niemożliwe.

Czy ktoś jeszcze widział coś takiego. Wygląda na to, że ma coś wspólnego z kontrolkami, które nie są w odpowiedni sposób usuwane z czcionek w tych wersjach.

+0

Założę się, że jeśli przeniesiesz ten kod do prostego formularza, który został uruchomiony przez Application.Run, czy nadal ma ten problem? – tcarvin

+0

Tak, to prawda. Zacząłem od naszej pełnej aplikacji i obnażyłem kod, dopóki nie wyizolowałem problemu do tych kilku linii. – skeeve

+0

Po godzinach i godzinach debugowania znajduję się teraz w tym samym punkcie. Czy znalazłeś rozwiązanie swojego problemu? –

Odpowiedz

2

wychodził dokładnie ten sam problem. Próbowałem następujące (żaden rozwiązał problem):

  • Usuń wszystkie instrukcje new Font()
  • Korzystając Form.Close() zamiast Application.Exit()
  • przenieść całą aplikację .NET CF 3.5
  • starań by usuwać zależności SQLite

Jedyne rozwiązanie, które ostatecznie zadziałało w naszym przypadku (nie jest to jednak "ładne" rozwiązanie), een następujące polecenie w MainForm.Closed()

Process.GetCurrentProcess().Kill() 
0

Napotkano na ten sam problem: Motorola MC3100, z wince6, zawiesza się tylko przy wyjściu aplikacji, gdy działa w trybie autonomicznym, bez awarii po uruchomieniu z dołączonym debugerem VS. po awarii system operacyjny był HS i jedynym rozwiązaniem było zimne uruchamianie urządzenia.

Udaje mi się poradzić sobie z poniższym rozwiązaniem.

Moja aplikacja korzystała z Application.exit() w podformularzu modalnym i wygląda na to, że nie radzi sobie z niektórymi niezarządzanymi zasobami używanymi przez czcionkę.

w moim przypadku dokładną przyczyną było użycie nowej czcionki (...) w mojej głównej formie. użycie go w podformodzie modalnym nie spowodowało żadnego problemu.

Powrót do pliku application.exit() w formularzu głównym również nie działał, ani nie utylizowaliśmy jawnie zasobów fontów (dużo próbowałem zorientować w ten sposób).

Na koniec jedynym rozwiązaniem, które działa, było zamknięcie programu głównego zamiast użycia application.exit() i działa dobrze.

0

miałem dokładnie ten problem z MC3190. Rozwiązaniem, które znalazłem, było śledzenie wszystkich formularzy, które zostały otwarte w aplikacji, dodając każdą instancję do globalnej listy i po zakończeniu aplikacji pętli na liście i wywołanie formularza.Dispose na każdej pozycji na liście. Od wielu miesięcy mnie stresuje.

0

Wystąpił ten problem w przypadku urządzeń Motorola MC3190 z systemem Windows CE 6.0/.NET 3.5 CF. Przez wiele miesięcy napotykaliśmy sporadyczne okno dialogowe błędu krytycznego po zamknięciu naszej aplikacji. Każda możliwa opcja została zbadana od wyjątków ThreadAbort, aby upewnić się, że każdy zasób został właściwie usunięty.

Zwykle, jeśli urządzenie nie ma określonej czcionki lub próbuje uzyskać dostęp do nierozpoznanego, domyślnie będzie to Arial. Jednak w przypadku MC3190, jeśli czcionka nie zostanie rozpoznana, urządzenie wyświetli okno dialogowe błędu krytycznego i zawiesi po zamknięciu aplikacji. Powoduje to, że użytkownik musi ogrzać rozruch (czasami zimny rozruch).

Wpadliśmy dwa rozwiązania tego problemu:

  1. ustawić czcionkę aplikacji szeroka, aby coś, co jest obsługiwane (zastępujących Tahoma z Arial)
  2. Wyczyść obiektów dowolny globalny czcionki albo instancji z obsługiwaną czcionką LUB ustawieniem na wartość null.
0

Należy utworzyć formularz i uruchomić kod w kontekście Application.Run(). Pod koniec biegu wiele zasobów jest usuwanych "przez magię". W przeciwnym razie musisz pozbyć się wszystkich zasobów, które należy zbyć.

0

wystąpił ten sam problem i rozwiązać z tej linii kodu w MainForm.Closed()

Process.GetCurrentProcess().Kill() 
0

miałem ten sam problem na Motorola 9190-G przy użyciu .NET Compact Framework 3.5. Czasami musiałem rozgrzać urządzenie, ponieważ zawiesiłoby się po zamknięciu aplikacji.

Udało mi się obejść ten problem, podając czcionkę formularza ListView zawartą w Constructor na Arial, 10pt, Regular. Następnie programowo ustawiłem czcionkę na żądaną czcionkę. Na przykład myListView.Font = new System.Drawing.Font("Tahoma", 11F, System.Drawing.FontStyle.Bold);.

Gdybym miał czcionkę ustawioną na jakąkolwiek inną kombinację czcionek/stylów/rozmiarów czcionki, podczas zamykania aplikacji na urządzeniu mobilnym otrzymywałbym komunikat o błędzie "Program napotkał poważny problem i musi się zamknąć".

Powiązane problemy