csahrp 让创建的线程等待
时间: 2023-11-20 18:24:01 浏览: 31
在 C# 中,可以使用 ManualResetEvent 类来让创建的线程等待。ManualResetEvent 类是一个同步辅助类,可以用来协调多个线程之间的操作。
以下是一个示例:
```
ManualResetEvent waitHandle = new ManualResetEvent(false); // 初始状态为非终止状态
Thread t = new Thread(() =>
{
// 线程的代码
waitHandle.Set(); // 通知主线程,线程执行完成
});
t.Start(); // 启动新线程
waitHandle.WaitOne(); // 等待线程执行完成
```
在上面的示例中,我们创建了一个 ManualResetEvent 对象 waitHandle,并将它的初始状态设置为非终止状态(即 false)。然后,我们创建了一个新线程,并使用 Start 方法启动它。在新线程中,当线程执行完成时,我们调用 waitHandle 的 Set 方法来将它的状态设置为终止状态(即 true)。
在主线程中,我们调用 waitHandle 的 WaitOne 方法来等待线程执行完成。当 waitHandle 的状态为终止状态时,WaitOne 方法就会返回,程序继续执行。如果 waitHandle 的状态在超时时间内仍然为非终止状态,WaitOne 方法就会抛出一个 TimeoutException 异常。
需要注意的是,如果创建的线程永远不会执行完成,那么主线程就会一直等待。因此,建议在使用 ManualResetEvent 类时,要设置一个超时时间,以避免出现死锁的情况。可以使用 WaitOne 方法的重载版本来指定超时时间,例如:
```
waitHandle.WaitOne(1000); // 等待线程执行完成,最多等待 1000 毫秒
```