Heim > Backend-Entwicklung > C++ > Wie kann ich warten, bis ein Thread in .NET abgeschlossen ist?

Wie kann ich warten, bis ein Thread in .NET abgeschlossen ist?

Linda Hamilton
Freigeben: 2025-01-21 19:42:27
Original
217 Leute haben es durchsucht

How Can I Wait for a Thread to Complete in .NET?

Mehrere Möglichkeiten, in .NET auf den Thread-Abschluss zu warten

Multithread-Programmierung ermöglicht die gleichzeitige Ausführung mehrerer Aufgaben. Wenn mehrere Threads gleichzeitig mit dem Haupt-UI-Thread ausgeführt werden, muss ihre Ausführung synchronisiert werden. Eine Möglichkeit besteht darin, zu warten, bis der Thread abgeschlossen ist, bevor mit der Ausführung fortgefahren wird.

Bedenken Sie den folgenden Codeausschnitt:

public void StartTheActions()
{
  Thread t1 = new Thread(new ThreadStart(action1));
  t1.Start();

  // 在启动t2之前等待t1完成。
  // 创建一个用作通知机制的事件。
}
Nach dem Login kopieren

Um auf das Ende eines weiteren Threads zu warten, können Sie ein paar Dinge tun:

1. Thread.Join-Methode

t1.Join();
Nach dem Login kopieren

Diese Methode blockiert den aktuellen Thread, bis der angegebene Thread seine Ausführung abgeschlossen hat.

2. WaitHandle verwenden

ManualResetEvent waitEvent = new ManualResetEvent(false);

// 启动线程并传递等待事件。
Thread t1 = new Thread(() =>
{
  action1();
  waitEvent.Set();
});
t1.Start();

// 等待线程完成。
waitEvent.WaitOne();
Nach dem Login kopieren

3. Auslöseereignis

public event EventHandler ThreadDone;

// 启动线程并添加事件处理程序。
Thread t1 = new Thread(() =>
{
  action1();
  ThreadDone?.Invoke(this, EventArgs.Empty);
});
t1.Start();

// 通过注册事件处理程序来等待线程。
void WaitForThread()
{
  ThreadDone += (sender, args) => { /* 执行操作 */ };
}
Nach dem Login kopieren

4. Verwenden Sie die Delegation

public delegate void ThreadDoneHandler();

// 启动线程并传递用于通知的委托。
Thread t1 = new Thread(() =>
{
  action1();
  threadDone?.Invoke();
});
t1.Start();

// 通过注册委托来等待线程。
ThreadDoneHandler threadDoneHandler = () => { /* 执行操作 */ };
threadDoneHandler += delegate { threadDoneHandler = null; };
Nach dem Login kopieren

5. Verwenden Sie asynchrone Operationen

Task<int> task = Task.Run(() =>
{
  return action1();
});

// 等待任务完成。
int result = task.Result;
Nach dem Login kopieren

Welche Methode Sie wählen, hängt von den spezifischen Anforderungen Ihrer Anwendung ab. Wenn Sie den aktuellen Thread blockieren müssen, bis ein anderer Thread abgeschlossen ist, ist Thread.Join() wahrscheinlich die am besten geeignete Option. Wenn Sie den Thread nicht blockieren möchten, können Sie andere Techniken wie Ereignisse, Delegaten oder asynchrone Vorgänge verwenden.

Das obige ist der detaillierte Inhalt vonWie kann ich warten, bis ein Thread in .NET abgeschlossen ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage