多執行緒程式設計允許同時執行多個任務。當多個執行緒與主UI執行緒同時運行時,需要同步它們的執行。一種方法是在繼續執行之前等待線程完成。
考慮以下程式碼片段:
<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中文網其他相關文章!