Frank (no reg): VB.NET > Thread mit übergabewerten.

Beitrag lesen

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