Zhen
Lt. Junior Grade
- Registriert
- Aug. 2009
- Beiträge
- 299
Hallo Leute,
ich hät da ein kleines Problem. Hab so ne Art mini-Messenger für mich programmiert (naja ist eigentlich Teil einer größeren Anwendung).
Jetzt hab ich aber das Problem, dass ich ständig ne System.IO Exception bekomme "WSACancelBlockingCall". Irgendwie kam die Exception in einer uralten Version nicht vor
jetzt hat sich aber seitdem schon so viel getan, dass ich den Code von damals nicht mehr einsehen kann.
Vielleicht könnt ihr mir ja helfen bei meinem Problem:
Also das ist die Methode "logout" sie läuft in einem eigenen Thread und wird bereits aufgerufen sobald der User sich zum Server verbindet. Sie soll eigentlich nichts weiter machen als warten bis der Client seinen Username schickt (was beim beenden der Anwendung passiert) und wenn das der Fall, dann den Usernamen aus der OnlineListe austragen und in die OfflineListe eintragen.
Diese Methode wird in der Gui aufgerufen wenn auf den Button "senden" geklickt wird. Sie soll den Text dann an den Client schicken.
Und hier ist mein Problem. Die WSACancelBlockingCall tritt nur dann auf, wenn ich die SendText(string text)-Methode aufrufe!
Ich versteh aber nicht wieso?? Was soll da den was blockieren?
ich hät da ein kleines Problem. Hab so ne Art mini-Messenger für mich programmiert (naja ist eigentlich Teil einer größeren Anwendung).
Jetzt hab ich aber das Problem, dass ich ständig ne System.IO Exception bekomme "WSACancelBlockingCall". Irgendwie kam die Exception in einer uralten Version nicht vor

jetzt hat sich aber seitdem schon so viel getan, dass ich den Code von damals nicht mehr einsehen kann.
Vielleicht könnt ihr mir ja helfen bei meinem Problem:
PHP:
private void logout(object objekt) {
//der Username der sich gerade eingeloggt hat
string uname = (string)objekt;
TcpClient client = (TcpClient)UserOnline[uname];
StreamReader reader = new StreamReader(client.GetStream());
while (true) {
try {
//liest die ankommenden Nachrichten des Clients
string message = reader.ReadLine();
//entspricht die Nachricht dem Usernamen
if (message == uname) {
//den Client aus der Liste mit angemeldeten Clients austragen
UserOnline.Remove(uname);
//Usernamen in die offline.xml Datei eintragen
//da stehen alle gerade abgemeldeten User drin
UsersConfiguration.LogoutUser(uname);
break;
}
} catch (Exception) {
//den Client aus der Liste mit angemeldeten Clients austragen
UserOnline.Remove(uname);
//Usernamen in die offline.xml Datei eintragen
//da stehen alle abgemeldeten User drin
UsersConfiguration.LogoutUser(uname);
break;
}
}
}
Also das ist die Methode "logout" sie läuft in einem eigenen Thread und wird bereits aufgerufen sobald der User sich zum Server verbindet. Sie soll eigentlich nichts weiter machen als warten bis der Client seinen Username schickt (was beim beenden der Anwendung passiert) und wenn das der Fall, dann den Usernamen aus der OnlineListe austragen und in die OfflineListe eintragen.
PHP:
public void SendText(string text) {
foreach (string user in UserName) {
try {
//holt den Client aus dem Hashtable
TcpClient onClient = (TcpClient)UserOnline[user];
//erstellt einen neuen Streamwriter für den gewählten Client
Writer = new StreamWriter(onClient.GetStream());
//Schreibt den Text in den Stream
Writer.WriteLine(text);
Writer.Flush();
Writer.Dispose();
Writer = null;
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
}
Diese Methode wird in der Gui aufgerufen wenn auf den Button "senden" geklickt wird. Sie soll den Text dann an den Client schicken.
Und hier ist mein Problem. Die WSACancelBlockingCall tritt nur dann auf, wenn ich die SendText(string text)-Methode aufrufe!
Ich versteh aber nicht wieso?? Was soll da den was blockieren?
