12. august 2008 - 23:23Der er
11 kommentarer og 1 løsning
Thread Safe Code og Invoke
Jeg arbejder i øjeblikket med et simpelt chat program for at blive bedre til at bruge TcpClients og så videre. Jeg har dog et problem. Jeg vil gerne ændre en TextBoxs Text property fra en anden Thread end den den er skabt i, og dette har jeg løst ved brug af InvokeRequired og Invoke. Men problemet er, at jeg gerne vil have linjeskift mellem de beskeder, der modtages, og det kan jeg ikke rigtig løse. Når jeg invoker bliver den nye tekst bare skrevet over den gamle. Her er den funktion jeg bruger nu:
private delegate void WriteMsgDel(string msg);
public void WriteMessage(string msg) { if (this.txtMsgArea.InvokeRequired) { WriteMsgDel d = new WriteMsgDel(WriteMessage); this.txtMsgArea.Invoke(d, msg); } else this.txtMsgArea.Text = String.Format("{0:t}", DateTime.Now) + " - " + msg + Environment.NewLine + Environment.NewLine + this.txtMsgArea.Text; }
Jo det løste lidt. Men det ser ud som om at min client bliver ved med at sende den samme streng og så bare overskriver de første tegn med det nye man prøver at sende. Så f.eks.: Client: Sigurd Suhm has connected Server: Sigurd Suhm has connected. Client. Hej Servern: Hejurd Suhm has connected.
Og linjeskiftne stopper med at fungere efter det første... Nogle idéer til hvad jeg kan have overset?
Den første løsning ændrer ikke rigtig noget. Kunne jeg lokke dig til at give et eksempel på hvordan min NetworkStream behandles i en StreamReader? Har leget lidt rundt med det uden noget resultat.
Jeg takker mange gange for hjælpen. Det virker en del bedre nu. Har stadig meget at lære, men det her hjalp mig med at få lidt af det lidt mere ind under huden.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.