Passing zwei Parameter zu einem neuen Thread auf dem Threadpool kann manchmal kompliziert sein, aber es scheint, dass mit Lambda-Ausdrücke und anonymen Methoden, kann ich dies tun:ThreadPool.QueueUserWorkItem mit einem Lambda-Ausdruck und anonymer Methode
public class TestClass
{
public void DoWork(string s1, string s2)
{
Console.WriteLine(s1);
Console.WriteLine(s2);
}
}
try
{
TestClass test = new TestClass();
string s1 = "Hello";
string s2 = "World";
ThreadPool.QueueUserWorkItem(
o => test.DoWork(s1, s2)
);
}
catch (Exception ex)
{
//exception logic
}
Nun, ich habe dieses Beispiel sicherlich vereinfacht, aber diese Punkte sind der Schlüssel:
- Die String-Objekte THREAD
- Die s1 und s2 Variablen sind unveränderlich und daher übergeben wird erklärt w ith im Rahmen des try-Blocks, den ich sofort nach dem Einreihen der Arbeit in den Thread-Pool verlasse, so dass die Variablen s1 und s2 danach nie geändert werden.
Ist da etwas nicht in Ordnung?
Die Alternative besteht darin, eine neue Klasse zu erstellen, die einen unveränderlichen Typ mit drei Mitgliedern implementiert: test, s1 und s2. Das scheint nur eine zusätzliche Arbeit ohne Nutzen zu sein.
Warum schreibst du nicht einfach "o => test.DoWork (s1, s2)" anstelle der ausführlicheren Definition? –
@Mehrdad: Weil ich Lambda-Ausdrücke wirklich neu bin. ;) - Vielen Dank! –
@Mehrdad: Ich habe es in der Frage geändert. –