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

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

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-21 19:42:27217ブラウズ

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

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

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

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

<code class="language-csharp">public void StartTheActions()
{
  Thread t1 = new Thread(new ThreadStart(action1));
  t1.Start();

  // 在启动t2之前等待t1完成。
  // 创建一个用作通知机制的事件。
}</code>

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

1. Thread.Join メソッド

<code class="language-csharp">t1.Join();</code>

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

2. WaitHandle を使用する

<code class="language-csharp">ManualResetEvent waitEvent = new ManualResetEvent(false);

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

// 等待线程完成。
waitEvent.WaitOne();</code>

3. イベントのトリガー

<code class="language-csharp">public event EventHandler ThreadDone;

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

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

4. 委任を使用する

<code class="language-csharp">public delegate void ThreadDoneHandler();

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

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

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

<code class="language-csharp">Task<int> task = Task.Run(() =>
{
  return action1();
});

// 等待任务完成。
int result = task.Result;</code>

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

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。