Hallo, ergänzend
es gibt zwei Arten von ThreadStart Delegates:
- ThreadStart (ohne Parameter)
- ParameterizedThreadStart (mit object als Parameter)
Wenn start einem Delegaten eine Methode mit/ohne Parameter direkt in den new Thread() Konstruktor gegeben wird, wählt .Net selbst den richtigen Delegaten aus.
/* ja, ich weiss, ist C# */
Thread t = new Thread(delegate(object o) { Console.WriteLine("Hello {0}!", o.ToString()); });
t.Start("Frank");Allerdings muss man nicht immer einen ganzen kompletten Thread aufmachen, wenn man ihn nicht für die gesamte Lebensdauer braucht.
Für kurze abgeschlossene Aufgaben empfiehlt sich der ThreadPool mit der Methode QueueUserWorkItem:
ThreadPool.QueueUserWorkItem(delegate(object o) { Console.WriteLine("Hello {0}!", o.ToString()); }, "Frank");
Über das asnychrone Programmiermodell mit BeginInvoke und EndInvoke ist das natürlich auch möglich
delegate void SampleDelgate(object o);
SampleDelgate d = delegate(object o) { Console.WriteLine("Hello {0}!", o.ToString()); };
d.BeginInvoke("Frank", delegate(IAsyncResult ar)
{
AsyncResult aResult = (AsyncResult)ar;
SampleDelgate temp = (SampleDelgate)aResult.AsyncDelegate;
temp.EndInvoke(ar);
}, null);Und bitte Threads nicht mit .Abort() abbrechen sondern einfach auslaufen lassen.
Ciao, Frank
Danke. Das hilft mir schon gewaltig weiter.
Jetzt habe ich aber leider ein weiteres Problem:
(ich poste den code nicht, weil dieser aus dem Gallileo-Computing-Handbuch stammt und minimal abgewandet ist. Mehr infos im weiteren Text)
Dazu muss ich aber erstmal erläutern, was ich vor habe:
Ich möchte ein Multiuser-Chat via Socket erstellen. Will mich da erstmals durchfriemeln. Das Gallileo-computing-handbuch beschreibt aber leider nur ein Singe-User-Chat, welcher nur einen einzigsten Socket parrallel annehmen kann.
Nun versuchte ich logischerweise, das übergebende Socket an einen eigenen Thread weiterzureichen, der das solange handhabt, bis getrennt wird und die hauptfunktion unbeeinflusst weiterläuft.
Jedoch funktioniert das irgendwie nicht. Sowie ich verbinden will, schmeißt er die verbindung sofort raus und das programm schmiert ab.
Quellcode kennt wahrscheinlich jeder aus dem Gallileo-Computing-Handbuch. Dort einfach ab "socket.Accept()" den übergabewert an ein eigenen Thread geschickt und das ganze weiterlaufen lassen. (die server.Listen(1) in einer Do While True-Schleife, die quasi nie endet und nur durchs Try/Catch beendet wird)
Möchte gerne ein möglichst simples beispiel für einen server, wo mehrere clients einfach akzeptiert werden können. (multiuser-chat)
Wäre für Lösungsbeispiele (möglichst in VB.NET) sehr dankbar.
Mit freundlichen Grüßen
Sephiroth