Hi alle zusammen!
Ich hab ein sehr seltsames Problem mit der statischen Methode Exit() aus der Application Klasse! (Namespace: System.Windows.Forms)
Und zwar gibt es eine Klasse in meinem Programm welche die Initialisierung vornimmt, wie beispielsweise die Config laden etc...
Diese Klasse beinhaltet eine Methode welche Application.Exit() ausführt.
So, jetzt zum eigentlichen Problem:
===============================
Ich habe einige Formen in meiner Applikation die auf das Application.Exit() auch geschlossen werden. Nur wenn ich eine bestimmte Form aufrufe, welche eine Klasse initialisiert, die 2-3 Socketverbindungen und 1 COM Port Verbindung öffnet.
Diese werden aber beim schließen dieser Form wieder beendet.
Jetzt ist meine Frage: An was könnte es liegen, dass sich die Applikation nicht beenden lässt? Ich hab auch schon eingestellt dass alle Exceptions ausgegeben werden und das Studio unterbrechen soll. NIX!
Hängt eventuell ein THREAD? Bzw. wie kann ich das festellen oder ihn sicher beenden?
Vielen Dank!
Gruß
Maik
Original von maik
Hängt eventuell ein THREAD? Bzw. wie kann ich das festellen oder ihn sicher beenden?
Kann natürlich gut sein. Threads sollten sich aber immer selber beenden. Von außen kann man die kaum zuverlässig killen. Selbst nen Thread.Abort() fragt bloß höflich nach ob der Thread nicht mal Lust hat bei Gelegenheit aufzuhören, dass er wirklich beendet wird ist nicht garantiert.
Baka wa shinanakya naoranai.
Mein XING Profil.
hm... ok!
das heißt dann konkret? hab ich jetzt einfach pech, oder was könnte ich noch machen? 😉
HA! ich habs!
der COM port war aus irgend einem Grund noch geöffnet und da dies eine externe DLL ist, muss ich da den THREAD vermutlich erst schließen!
arrr.... seXy! 🙂
danke für die hilfe, anyway!
cheers
Hallo maik,
ich denke auch, dass es an dem Thread liegt. Der Vollständigkeit halber aber noch die Doku:
Application.Exit-Methode
Die Exit-Methode beendet alle aktiven Meldungsschleifen aller Threads und schließt alle Fenster der Anwendung. Diese Methode zwingt die Anwendung nicht notwendigerweise zum Beenden.
herbivore
Ergänzung zu herbivore's Post:
Mit Environment.Exit kann man den Process per Holzhammer beenden... der Process macht dann einfach den Schirm zu und reisst alles was noch rumkreucht herunter ....
Aber ich fahre meine Anwendungen lieber sauber runter ... daher verzichte ich normalerweise sowohl auf Application.Exit wie auch auf Environment.Exit.
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Es kommt immer darauf an wie die Anwendung aufgebaut ist...
Wenn meine Anwendung Multithreaded ist und ich nicht auf alle Threads einen Handle habe, ich aber sicher gehen will, dass nicht das Windows "sofort" beenden Fenster kommt... schließe ich die Anwendung mittles
System.Environment.Exit(0);
Das macht allerdings nur sinn, wenn alle geöffneten Dateien geschlossen sind.. nicht dass noch irgendwelche Properties oder Daten verloren gehen
Ansonsten beende ich meine Anwendungen auch von hand...