C# 解惑:Monitor.Wait 阻塞线程能否用 AutoResetEvent.Set 恢复执行?附示例!
是的,你可以使用AutoResetEvent类来唤醒一个通过Monitor的Wait方法进入阻塞状态的线程。 当一个线程调用Monitor的Wait方法时,它会释放自己持有的对象锁,然后进入阻塞状态,直到其他线程调用同一对象的NotifyAny或NotifyAll方法,或者另一个线程通过AutoResetEvent的Set方法唤醒它。 当一个线程被唤醒后,它将再次尝试获取对象锁,然后继续执行。通过AutoResetEvent的Set方法可以唤醒处于阻塞状态的线程,并使其恢复执行。 下面是一个简单的示例代码: ```csharp using System; using System.Threading; class Example { static void Main() { AutoResetEvent autoResetEvent = new AutoResetEvent(false); Thread thread = new Thread(() => { // 等待信号 Console.WriteLine("Waiting..."); autoResetEvent.WaitOne(); Console.WriteLine("Continuing..."); }); thread.Start(); // 等待一段时间,以便线程进入阻塞状态 Thread.Sleep(1000); // 发出信号唤醒线程 Console.WriteLine("Setting signal..."); autoResetEvent.Set(); thread.Join(); } } ``` 在这个例子中,一个新线程被创建并开始运行。该线程调用AutoResetEvent的WaitOne方法等待信号。在主线程中,我们等待一段时间以确保新线程已经进入阻塞状态,然后调用AutoResetEvent的Set方法发出信号唤醒新线程。新线程将获取对象锁并继续执行。 ######[AI写代码神器 | 350点数解答 | 2023-11-09 17:54:50]
- Java实现链表反转:迭代与递归双解法详解及开发实战指南(DeepSeek | 1409点数解答 | 2026-03-15 15:09:29)33
- 揭秘 Python:网页表单自动化定位与等待操作代码解析(字节豆包 | 361点数解答 | 2024-11-11 21:56:42)330
- 50 分判断题大揭秘:变量、条件、循环与数组知识正误辨析(字节豆包 | 229点数解答 | 2025-12-21 19:15:16)70
- SQL:[pr_createdtables]存储过程代码解析及表创建准备 (字节豆包 | 33点数解答 | 2024-08-29 15:34:33)355
- SQL 修正:创建带唯一索引的 py_plan_opportunity_point 表(阿里通义 | 328点数解答 | 2024-09-04 16:07:48)320
- "MySQL: Creating the 'py_plan_opportunity_point' Table with Unique Location Codes"(阿里通义 | 188点数解答 | 2024-09-04 16:08:40)443
- MySQL:完整创建 py_plan_opportunity_point 表及字段详解(阿里通义 | 348点数解答 | 2024-09-04 16:09:36)289
- "SQL条件判断下的角色数据更新操作揭秘"(GPT | 51点数解答 | 2024-10-22 11:24:35)295
- "Enhanced SQL Script for SRO MMORPG Database: Conditional Updates, Transactions & Logging"(阿里通义 | 969点数解答 | 2024-10-22 11:26:02)366
- 巧用集合:计算输入正整数中等于两数之和的数量(字节豆包 | 558点数解答 | 2025-11-24 19:19:24)42
- 探寻数组中最长摆动子序列长度:思路剖析与代码优化(GPT | 758点数解答 | 2024-12-23 23:18:29)274
- 独家剖析:求解数组最长摆动子序列长度的代码实现与改进建议(GPT | 350点数解答 | 2024-12-23 23:20:54)271