Maison > développement back-end > C++ > Comment puis-je attendre la fin d'un fil de discussion dans .NET ?

Comment puis-je attendre la fin d'un fil de discussion dans .NET ?

Linda Hamilton
Libérer: 2025-01-21 19:42:27
original
217 Les gens l'ont consulté

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

Plusieurs façons d'attendre la fin du thread dans .NET

La programmation multithread permet d'effectuer plusieurs tâches simultanément. Lorsque plusieurs threads s'exécutent simultanément avec le thread principal de l'interface utilisateur, leur exécution doit être synchronisée. Une solution consiste à attendre que le thread soit terminé avant de poursuivre l'exécution.

Considérez l'extrait de code suivant :

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

  // 在启动t2之前等待t1完成。
  // 创建一个用作通知机制的事件。
}
Copier après la connexion

Pour attendre la fin d'un autre fil de discussion, vous pouvez faire plusieurs choses :

1. Méthode Thread.Join

t1.Join();
Copier après la connexion

Cette méthode bloque le thread actuel jusqu'à ce que le thread spécifié termine son exécution.

2. Utilisez WaitHandle

ManualResetEvent waitEvent = new ManualResetEvent(false);

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

// 等待线程完成。
waitEvent.WaitOne();
Copier après la connexion

3. Événement déclencheur

public event EventHandler ThreadDone;

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

// 通过注册事件处理程序来等待线程。
void WaitForThread()
{
  ThreadDone += (sender, args) => { /* 执行操作 */ };
}
Copier après la connexion

4. Utiliser la délégation

public delegate void ThreadDoneHandler();

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

// 通过注册委托来等待线程。
ThreadDoneHandler threadDoneHandler = () => { /* 执行操作 */ };
threadDoneHandler += delegate { threadDoneHandler = null; };
Copier après la connexion

5. Utiliser des opérations asynchrones

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

// 等待任务完成。
int result = task.Result;
Copier après la connexion

La méthode que vous choisissez dépend des besoins spécifiques de votre application. Si vous devez bloquer le fil de discussion en cours jusqu'à ce qu'un autre fil de discussion soit terminé, Thread.Join() est probablement l'option la plus appropriée. Si vous ne souhaitez pas bloquer le thread, vous pouvez utiliser d'autres techniques telles que des événements, des délégués ou des opérations asynchrones.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal