Programm bleibt als Prozess bestehen

Fridulin

Erfahrenes Mitglied
Hallo,

mein Problem ist, mein Programm schließt sich nicht vollständig es bleibt als Prozess bestehen. Ich konnte es jetzt mal so weit testen das, sobald ich eine MessageBox bei on closed event rein setze es sich nach der MessageBox immer schließt und nicht als Prozess bestehen bleibt. Sobald die Box weg ist bleibt die Form bestehen, wenn ich noch eine andere Form in der Hauptform geöffnet habe. Auch wenn ich diese vorher schließe.

Es scheint so als wenn die Form vorher geschloßen wird, bevor ein Befehl im Thread noch abgearbeitet wird. Aber wie kann ich das verhindern? Der Befehl muß vor dem Schließen abgearbeitet werden.

So Sieht mein beenden Befehl aus.
Code:
try{
    abmelden();
    }

catch
    {
    }
schliessen = "japs";
this.Close();

Über jede Hilfe wäre ich sehr Dankbar.

Viele Grüße
Fridulin
 
Hallo,

danke für deine Antwort, daß on closing event benutze ich und da bleibt das Programm als Prozess bestehen. Erst wenn ich ein on closed event benutze und dort eine MessageBox rein setze wird das Programm nach klicken auf ok der MessageBox vollständig beendet.

Viele Grüße
Fridulin
 
Hallo,

Ich habe auch schon Probiert beim on closed event ein thread sleep rein zupacken, allerdings keinen Erfolg. Ich habe auch Probiert die letzte Funktion die ausgeführt wird nicht als void, sondern als bool zu deklarieren und das, das Programm dann nur schließt wenn die bool Funktion true zurück setzt. Allerdings alles ohne Erfolg, ich bin echt Ratlos.
Was kann das nur sein?

Viele Grüße und ich hoffe jemand hat eine Idee.
Fridulin
 
Hallo,

es ist so, das vor dem Beenden des Programms der Thread noch etwas probiert zu senden und dann die Empfangsbereitschaft beenden muß. Das dauert wohl zu lange und vorher die Form beendet wird, anders kann ich mir es nicht erklären. Da ja wie gesgat, wenn ich mit einer MessageBox beim on closed event rein packe wird alles Ordnungsgemäß beendet.

Hier meine Abmelden funktion.
Code:
bool abmelden()
{
				
	p_liste.Visible = false;
	p_einloggen.Visible = true;
			
	try
	{
		sende_nachricht("bin wech|"+ tb_name.Text);
	}
	catch{}

	
      	client.Close();
      	return (true);
			
}

Danach springt das on Closing event an.

Code:
void on_closing(object sender, System.Windows.Forms.FormClosingEventArgs e)
{
		
	if(schliessen != "japs")
	{
					
		e.Cancel= true;	
		this.Hide();
		programm_beenden(); // Prüft nur ob das Beenden Signal durch den Benutzer oder vom Herunterfahren des Systems kommt. Ich habe das allerdings auch schon weggelassen und keine Änderung.
	}
			
	else
	{
				
			/*	
				this.Close();
				client.Close();
				
				Close();	
			*/
			
			
	}

}
 
Hallo,

Ich habe sende_nachricht mal auskommentiert und auch keine Änderung, sprich der Prozess bleibt bestehen. Ich denke es liegt an client.Close(), wenn ich den Auskommentiere und auch die MessageBox in on closed event drinnen habt bleibt der Prozess trotzdem noch bestehen. Sprich ich denke er schaltet die Empfangsbereitschaft nicht rechtzeitig ab.

Hinter client steht TcpClient client.Dieser versucht in einer Do While Schleife so lange etwas zu empfangen bis dieser geschlossen wird.

Viele Grüße
Fridulin
 
Bist du sicher, dass im on_closing der Else-Zweig ausgeführt wird? Denn im eigentlichen if brichst du das OnClosing ab ... nur so nebenbei.
 
Edit:
Ich habe auch getestet ob die Empfangsbereitschaft gestoppt wurde mit MessageBox.Show(client.Connected.ToString()); dort kam heraus das die Verbindung doch schon abgebaut wurde und trotzdem der Prozess bestehen bleibt. Allerdings sobald ich vor dem schließen manuell vorher auf Abmelden klicke und die Funktion separat ausführe und dann das Programm schließe wird das Programm korrekt geschloßen.
Ich weiß einfach nicht mehr weiter, was ich noch testen kann.

Einerseits sagt es mir die Abmelden Funktion wird nicht richtig ausgeführt bzw. nicht vollständig vor dem beenden, anderseits sollte die aber schon beendet sein weil die Empfangsbereitschaft gestoppt wurde.

Viele Grüße
Fridulin


Hallo,

also ausgeführt wird der else Zweig, allerdings ist dieser sowieso leer bzw. auskommentiert und machen soll er nichts mehr. Das hatte ich früher mal benutzt, jedoch meldet er sich jetzt schon vorher ab bzw. schließt die Empfangsbereitschaft. Ich mache das jetzt über ein Kontextmenü, da sobald das Programm normal geschloßen wird es eigentlich nur minimiert werden soll.

Merkwürdiger weise wenn ich im on clsing event eine MessageBox rein packe, bleibt das Programm trotzdem noch als Prozess bestehen. Nur wenn die MessageBox in on Closed event steht wird das Programm korrekt geschloßen.

Komischer weise wird Programm auch immer korrekt beendet, wenn die user_form noch nicht aufgemacht wurde. Es wird auch korrekt beendet, wenn der User eine Server Nachricht in der server_form erhält. Das die user_Form im Hauptbereich / Global deklariert wird, hat damit nichts zutun, oder?
Code:
user_form user_formchat = new user_form(null);
Ich benutze die user_form öfters, sprich für jeder Chatter der einen eine Nachricht sendet wird die user_form benutzt. Nur eben immer mit anderer Inhalt.

Viele Grüße
Fridulin
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück