Laden...

Probleme mit FormClosing-Event

Erstellt von TripleX vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.012 Views
TripleX Themenstarter:in
328 Beiträge seit 2006
vor 14 Jahren
Probleme mit FormClosing-Event

Hallo Gemeinde,

zur Zeit beschäftigt mich gerade ein Problem, und ich weiss mal wieder nicht wie ich es beheben kann. Ich bastle gerade ein Programm, womit ich mich mittels VPN zur Schule verbinden und Netzlaufwerke einbinden kann.

Jetzt wollte ich es so haben, dass wenn ich das Programm mittels dem roten X schließe, die Verbindung zu VPN geschlossen wird, und außerdem alle Netzlaufwerke getrennt werden.

So, jetzt wirds etwas kompliziert:
Ich habe eine Disconnect-Methode. Diese Methode sendet also ein Signal (SIGTERM) zu einem Prozess und dann warte ich bis das Programm geschlossen ist
( _proc.WaitForExit()). Ich habe für den Prozess den "Exited"-Event abonniert, welcher sobald der Prozess beendet wurde, selber ein Event wirft (der heißt OnHostClosed). Diesen Event abonniere ich in einer anderen Klasse, welche für die Netzlaufwerke zuständig ist, und sobald der Event geworfen wird trenne ich alle Netzlaufwerke.

Ich hoffe mal, ihr habt bis dahin alles verstanden - klingt zwar kompliziert ist es aber eig. nicht.

So jetzt zu meinem Problem: Ich möchte die Disconnect-Methode gerne im FormClosing-Event aufrufen - doch leider werden meine Netzlaufwerke nicht getrennt. ich habe mal einen Breakpoint in den EventHandler, welcher aufgerufen werden sollte sobald der Prozess beendet wurde (OnHostClosed) gesetzt, doch der Event wird anscheinend nicht geworfen.

Ich weiß, dass eigentlich alles funktionieren sollte, denn ich habe einen Disconnect Button, der genau das gleiche macht (also der ruft halt die Disconnect-Methode auf) und da funktioniert alles wie gewünscht. Nur beim Schließen der Form gibt's Probleme - und ich weiß nicht warum.

Ich hoffe mir kann jemand bei diesem Problem helfen

Träume nicht dein Leben sondern lebe deinen Traum.
Viele Grüße, David Teck

J
237 Beiträge seit 2008
vor 14 Jahren

Hast du bei Process EnableRaisingEvents auf true?
Sonst werden keine Events gefeuert.

Grüße, JasonDelife.

Beim Programmieren löst man die Probleme, die man nicht hätte, programmierte man nicht.

TripleX Themenstarter:in
328 Beiträge seit 2006
vor 14 Jahren

ja, habe ich

 _proc = new Process()
{
    StartInfo = startInfo,
     EnableRaisingEvents = true
 };
_proc.Exited += new EventHandler(ProcessExited);

wie gesagt, beim klick auf den Disconnect-Button funktioniert es ja, nur beim schliessen der Form macht er es nicht 🤔

*edit* manchmal funktioniert alles wie gewünscht und manchmal nicht ... komisch ?(

Träume nicht dein Leben sondern lebe deinen Traum.
Viele Grüße, David Teck

U
1.688 Beiträge seit 2007
vor 14 Jahren

Hallo,

vermutlich wird Dein Programm beendet, bevor das (asynchrone?!) Trennen der Laufwerke und das Aufrufen des Events stattfinden kann.

Du musst in FormClosing erst einmal den Ablauf des unterbrechen, und dies später in Deinem EventHandler fortführen (sprich, nochmal Close() aufrufen und über ein Flag merken, dass FormClosing nicht nochmal Disconnect aufruft).