正如标题所说,这是一个有效的实施吗?我知道lock
语句的问题,但由于要求必须使用它。这段代码有效吗?
lock (richTextBox)
{
Monitor.Wait(richTextBox);
richTextBox.AppendText("Text");
Monitor.PulseAll(richTextBox);
}
答案 0 :(得分:2)
这段代码没有意义,因为每个线程都会在Monitor.Wait
上阻塞,除非其他一些代码块调用Monitor.PulseAll
,否则不会释放任何线程。通常在生产者/消费者类型场景中使用等待/脉冲(即一个或多个线程正在等待另一个线程完成某些任务或提供一些数据)。
如果您对使用lock
语句而不是Monitor.Enter
/ Monitor.Exit
提出更多疑问,那么该部分就可以了。
根据MSDN文章:
lock(obj) { ... }
应与:
相同Monitor.Enter(obj); try { ... } finally { Monitor.Exit(obj); }