C# Thread 线程等待,完成后通知
时间: 2023-07-28 08:44:19 浏览: 123
在 C# 中,可以使用 ManualResetEvent 类来实现线程等待和通知。ManualResetEvent 是一个同步基元,它允许一个或多个线程等待信号的到达,并在信号到达时继续执行。
以下是一个示例:
```csharp
using System;
using System.Threading;
class Program
{
static ManualResetEventSlim resetEvent = new ManualResetEventSlim(false);
static void Main()
{
Thread t = new Thread(DoWork);
t.Start();
resetEvent.Wait(); // 等待信号
Console.WriteLine("Thread has finished");
}
static void DoWork()
{
Console.WriteLine("Thread is running...");
Thread.Sleep(5000); // 模拟耗时操作
Console.WriteLine("Thread has finished");
resetEvent.Set(); // 发送信号
}
}
```
在上面的示例中,我们创建了一个 ManualResetEventSlim 对象,并将其初始状态设置为 false。在主线程中,我们启动了一个线程,并调用 resetEvent.Wait() 方法等待信号的到达。在该线程中,我们模拟了一个耗时操作,然后发送了一个信号,表示操作已完成。最后,我们在主线程中输出一条消息表示线程已完成。
需要注意的是,在 ManualResetEventSlim 对象上调用 Set() 方法会将它的状态设置为 true,从而允许等待的线程继续执行;而调用 Reset() 方法会将它的状态设置为 false,从而阻止等待的线程继续执行。由于 ManualResetEventSlim 是一个同步基元,因此在多线程环境下使用时需要注意线程安全问题。
阅读全文