Windows C#.NET 4.5 WPF项目。我有一个具有XPS内容的MemoryStream
对象。我可以构造一个PrintQueueStream
对象,然后将XPS内容复制到该对象,如下所示:
using (PrintQueueStream pqs = new PrintQueueStream(printQueue, jobName, true))
{
xps_stream.CopyTo(pqs);
}
我可以打开目标打印机的“查看正在打印的内容”视图,然后在调试器中逐步执行。在执行达到using块的大括号之前,我根本看不到任何打印队列活动。踩上大括号将导致pqs对象被处置,并且将其刷新并关闭,并且作业似乎在目标打印机队列中被假脱机。在队列处理完作业之前,执行不会离开大括号。
如果XPS很复杂且处理时间很长,并且我取消了打印机队列中的作业,则该作业不会从队列中消失。它不会导致Dispose迅速返回-实际上,作业直到打印机完成后才从队列中消失。职位描述发生变化,显示已被删除,但并未从队列中消失。
如果我退出我的应用,则取消的作业会立即从打印队列中消失。
我的问题是,如何从打印队列中获取“取消”操作,使其遵循我的代码,以便作业一旦被取消就消失了?
[[我也尝试使用CopyToAsync,因为它支持取消令牌,但是使用该函数调用我根本看不到任何队列活动 。 ]]