4

我正在使用带有阻塞队列的单个生产者-单个消费者模型。我希望生产者在完成生产后等待队列清空后再返回。

我实现了Marc Gravell建议的BlockingQueue。

在我的模型中,生产者(渲染器)使用事件来通知工作人员(打印机)何时渲染文件(工作人员将项目排队)以及每个文件都已被渲染(完成)。

现在,当渲染器完成时,方法结束并且工作人员被杀死,所以我最终得到了 10-15 个尚未打印的渲染文件。

我希望完成的事件处理程序阻塞,直到队列被清空,例如,当所有文件都被打印时。我想添加类似于“WaitToClose()”的方法,该方法将阻塞直到队列为空。

(设置工作线程会IsBackground = true有所作为吗?)

4

1 回答 1

4

如何将事件添加到队列中:

private AutoResetEvent _EmptyEvent = new AutoResetEvent(false);

然后修改Queue,设置为空时的事件,就可以对事件进行阻塞。

但是,进一步考虑,当队列为空时,打印机仍将打印最后一项。

因此,您可以在工作线程上加入(阻塞)。

更简单的想法:只是阻塞工作线程,并在队列为空时让工作线程完成(退出)?

于 2009-07-17T23:17:20.140 回答