ThreadStart:
Der ThreadStart-Delegierte ist als void ThreadStart() definiert, was bedeutet, dass die ausgeführte Methode keine Parameter haben kann. ThreadStart threadStart=neuer ThreadStart (Berechnen); Thread thread=neuer Thread (threadStart); Faden. Start(); Public Void Calculate() { doppelter Durchmesser=0,5; Console.Write ("Die Fläche des Kreises mit einem Durchmesser von {0} ist {1}"Durchmesser, Durchmesser*Math.PI); } Hier verwenden wir einen Delegaten, der einen ThreadStart-Typ definiert, der die Methode definiert, die der Thread ausführen muss: Calculate, bei dem der Umfang eines Kreises mit einem Durchmesser von 0,5 berechnet wird, und gibt aus. Dies stellt das einfachste Beispiel für Multithreading dar, was in vielen Fällen ausreicht
ParameterThreadStart: ParameterThreadStart ist definiert als void ParameterizedThreadStart (Objektzustand), und die Startfunktion des mit diesem Delegaten definierten Threads kann zum Beispiel einen Eingabeparameter akzeptieren:
ParameterizedThreadStart threadStart=new ParameterizedThreadStart(Calculate) Thread thread=neuer Thread() ; Faden. Start(0,9); Public Void Calculate(object arg)
{ doppelter Durchmesser=doppelt(arg); Console.Write ("Die Fläche des Kreises mit einem Durchmesser von {0} ist {1}"Durchmesser, Durchmesser*Math.PI);
}
Die Calcald-Methode hat einen Parameter vom Typ Objekt, obwohl es nur einen Parameter gibt, der ebenfalls ein Objekttyp ist, der bei der Nutzung noch konvertiert werden muss, aber glücklicherweise gibt es Parameter, und indem man mehrere Parameter zu einer Klasse kombiniert und dann die Instanz dieser Klasse als Parameter übergibt, kann man einen Mehrparametertransfer erreichen. Zum Beispiel:
Klasse AddParams
{ öffentliche Int A, B;
öffentliche AddParams (int numb1, int numb2) { a = numb1; b = numb2; }
} #endregion
Klassenprogramm
{ statisches Void Haupt(string[] args) { Console.WriteLine("***** Hinzufügen mit Thread-Objekten *****"); Console.WriteLine("ID des Threads in Main(): {0}", Thread.CurrentThread.ManagedThreadId);
AddParams ap = neue AddParams(10, 10); Thread t = neuer Thread(neuer ParameterizedThreadStart(Add)); t.Start(ap); Console.ReadLine(); }
#region Add-Methode statisches Void-Add(Objektdaten) { wenn (Daten sind AddParams) { Console.WriteLine("ID des Threads in Main(): {0}", Thread.CurrentThread.ManagedThreadId);
AddParams ap = (AddParams)data; Console.WriteLine("{0} + {1} ist {2}", ap.a, ap.b, ap.a + ap.b); } } #endregion
}
} |