C# WinForm wird nach einiger Zeit automatisch geschlossen?
Hallo,
vor einem Jahr habe ich mir ein Widget für den Desktop erstellt mit WinForm, doch nach einer langen Zeit schließt sich die Anwendung von selbst.
Damals habe ich noch nicht Try und Catch benutzt, heißt normal sollten Fehler sichtbar sein, aber nein, es kommt rein gar nichts. Die Anwendung ist irgendwann einfach nur weg.
Woran liegt das? Und wie kann man es verhindern?
*PS. Die Anwendung (Widget) soll permanent laufen
2 Antworten
Irgendetwas hast Du, was das Programm zum Absturz bringt, bei WPF muss man das z.B. selber behandeln.
Teste das nochmal in einem kleinen Test-Projekt, ob das wirklich so ist, wie Du es erwartest, achte aber auf einen vergleichbaren Aufbau, z.B. können andere Threads einen Unterschied machen.
Thema Try-Catch:
Try-Catch ist kein Allheilmittel, Du solltest es nicht überall nutzen, nur weil da ein Fehler auftreten könnte.
Try-Catch nutzt man nur dann, wenn Du ...
- Den Fehler tatsächlich behandeln/beheben kannst, z.B. wenn Du bei einem HTTP-Request mehrere Versuche durchführen willst/musst
- Die Kontrolle verlieren und später nicht mehr darauf reagieren kannst, z.B. im einem Click-EventHandler, global für die ganze Anwendung oder in einem Thread
Eine Ausnahme bildet Logging, aber vergiss dann nicht, die Exception weiter zu werfen, dann aber mit "throw;" - nur "throw;" - ganz wichtig. Ich persönlich würde das aber auch nur in Ausnahmefällen machen, denn Logging wird ohne einheitliches Vorgehen schnell sehr chaotisch und wenn Du obige Regeln vefolgst, kannst Du eine Exception auch dort loggen. Und Exceptions loggt man ganz, nicht nur die Message, das Spannendste ist nämlich der StackTrace.
Ein sinnvolles Logging wird dir vermutlich auch deinen Fehler aufzeigen.
PS:
Guck mal ins Windows-EventLog, vielleicht steht da was drin.
Moin,
kommt drauf an, was das auslöst - am besten den Code wieder bearbeiten und dann ggf mit Breakpoints Ausschau halten.
Du könntest noch überall try und catch hinpacken oder schreibst einfach selbst ein Log.
Das würde vermutlich nicht viel anders machen, da ja standardgemäß von C# immer ein großes Fenster kommt "ERROR", wenn man kein try und catch hat. Dieses Fenster kommt aber nicht
Das Ding ist, dass alles wunderbar läuft ... Es ist im Hintergrund ein Timer, der Permanent aktiv ist. Das ganze ist eine einstellbare "Analoge" Uhr.
Es braucht wirklich sehr viel Zeit damit das alleine wieder abschaltet, von daher weiß ich nicht, ob breakpoints wirklich so hilfreich sind