マルチスレッド プログラミングにより、複数のタスクを同時に実行できます。複数のスレッドがメイン UI スレッドと同時に実行されている場合、それらの実行を同期する必要があります。 1 つの方法は、スレッドが完了するまで待ってから実行を続行することです。
次のコード スニペットを考えてみましょう:
<code class="language-csharp">public void StartTheActions() { Thread t1 = new Thread(new ThreadStart(action1)); t1.Start(); // 在启动t2之前等待t1完成。 // 创建一个用作通知机制的事件。 }</code>
別のスレッドが終了するのを待つには、いくつかのことを行うことができます:
<code class="language-csharp">t1.Join();</code>
このメソッドは、指定されたスレッドが実行を完了するまで現在のスレッドをブロックします。
<code class="language-csharp">ManualResetEvent waitEvent = new ManualResetEvent(false); // 启动线程并传递等待事件。 Thread t1 = new Thread(() => { action1(); waitEvent.Set(); }); t1.Start(); // 等待线程完成。 waitEvent.WaitOne();</code>
<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>
<code class="language-csharp">public delegate void ThreadDoneHandler(); // 启动线程并传递用于通知的委托。 Thread t1 = new Thread(() => { action1(); threadDone?.Invoke(); }); t1.Start(); // 通过注册委托来等待线程。 ThreadDoneHandler threadDoneHandler = () => { /* 执行操作 */ }; threadDoneHandler += delegate { threadDoneHandler = null; };</code>
<code class="language-csharp">Task<int> task = Task.Run(() => { return action1(); }); // 等待任务完成。 int result = task.Result;</code>
どの方法を選択するかは、アプリケーションの特定のニーズによって異なります。別のスレッドが完了するまで現在のスレッドをブロックする必要がある場合は、おそらく Thread.Join()
が最も適切なオプションです。スレッドをブロックしたくない場合は、イベント、デリゲート、非同期操作などの他の手法を使用できます。
以上が.NET でスレッドが完了するまで待つにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。