Sahil, was versuchst du zu erreichen, indem du sicherstellst, dass Join auf allen Threads aufgerufen wird, ohne auf die Ausführung jedes einzelnen warten zu müssen? Wenn es für die Leistung ist, wird es nicht viel helfen, da sowieso, selbst wenn Sie einen Thread aufrufen. Verbinden Sie alle Threads, es muss warten, bis jeder Thread fertig ist, bevor Sie fortfahren.
Sowieso, wenn Sie müssen, dann ist hier, was ich zu sagen habe:
Es gibt keine direkte Methode des Wartens auf alle Fäden in einem stmt ist. Stattdessen habe ich nach etwas R & D eine etwas indirekte Methode erfunden. Anstatt einen Thread zu initialisieren und ihm ein ParameterizedThreadDelegate zu übergeben, können Sie direkt ein BeginInvoke für das ParameterizedThreadDelegate ausführen. Und dann können Sie WaitHandle.WaitAll verwenden, um auf die Ausführung aller Delegierten zu warten, bevor Sie fortfahren.
Hier ist der Code:
class Program
{
static void Main(string[] args)
{
List<ParameterizedThreadStart> listDelegates = new List<ParameterizedThreadStart>();
listDelegates.Add(new ParameterizedThreadStart(DelegateEg.Print));
listDelegates.Add(new ParameterizedThreadStart(DelegateEg.Display));
List<WaitHandle> listWaitHandles = new List<WaitHandle>();
foreach (ParameterizedThreadStart t in listDelegates)
listWaitHandles.Add(t.BeginInvoke("In Thread", null, null).AsyncWaitHandle);
WaitHandle.WaitAll(listWaitHandles.ToArray());
Console.WriteLine("All threads executed");
Console.Read();
}
}
public class DelegateEg
{
public static void Print(object obj)
{
Console.WriteLine("In print");
Console.WriteLine(obj);
}
public static void Display(object obj)
{
Console.WriteLine("In Display");
Console.WriteLine(obj);
}
}
danke, aber ich denke, ich war doof.paul fisher ist richtig.es läuft schon gut. –
ja ... ich deutete das gleiche an ... wie auch immer, es war gut r & d für mich :) –