ホームページ > バックエンド開発 > C++ > .NET でスレッドが完了するまで待つにはどうすればよいですか?

.NET でスレッドが完了するまで待つにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-21 19:42:27
オリジナル
216 人が閲覧しました

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

.NET でスレッドの完了を待ついくつかの方法

マルチスレッド プログラミングにより、複数のタスクを同時に実行できます。複数のスレッドがメイン UI スレッドと同時に実行されている場合、それらの実行を同期する必要があります。 1 つの方法は、スレッドが完了するまで待ってから実行を続行することです。

次のコード スニペットを考えてみましょう:

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

  // 在启动t2之前等待t1完成。
  // 创建一个用作通知机制的事件。
}
ログイン後にコピー

別のスレッドが終了するのを待つには、いくつかのことを行うことができます:

1. Thread.Join メソッド

t1.Join();
ログイン後にコピー

このメソッドは、指定されたスレッドが実行を完了するまで現在のスレッドをブロックします。

2. WaitHandle を使用する

ManualResetEvent waitEvent = new ManualResetEvent(false);

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

// 等待线程完成。
waitEvent.WaitOne();
ログイン後にコピー

3. イベントのトリガー

public event EventHandler ThreadDone;

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

// 通过注册事件处理程序来等待线程。
void WaitForThread()
{
  ThreadDone += (sender, args) => { /* 执行操作 */ };
}
ログイン後にコピー

4. 委任を使用する

public delegate void ThreadDoneHandler();

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

// 通过注册委托来等待线程。
ThreadDoneHandler threadDoneHandler = () => { /* 执行操作 */ };
threadDoneHandler += delegate { threadDoneHandler = null; };
ログイン後にコピー

5. 非同期操作を使用する

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

// 等待任务完成。
int result = task.Result;
ログイン後にコピー

どの方法を選択するかは、アプリケーションの特定のニーズによって異なります。別のスレッドが完了するまで現在のスレッドをブロックする必要がある場合は、おそらく Thread.Join() が最も適切なオプションです。スレッドをブロックしたくない場合は、イベント、デリゲート、非同期操作などの他の手法を使用できます。

以上が.NET でスレッドが完了するまで待つにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート