Каков наилучший способ отменить задание печати Windows, отправленное с помощью PrintQueueStream - PullRequest
0 голосов
/ 18 сентября 2018

Windows C # .NET 4.5 WPF проект.У меня есть MemoryStream объект, который имеет содержимое XPS.Я могу создать объект PrintQueueStream, а затем скопировать в него содержимое XPS, например:

using (PrintQueueStream pqs = new PrintQueueStream(printQueue, jobName, true))
{
   xps_stream.CopyTo(pqs);
}

. Я могу открыть представление целевого принтера «посмотреть, что печатает», а затем выполнить шаг в отладчике.Я не вижу активности очереди печати, пока выполнение не достигнет закрывающей фигурной скобки блока using.Если закрыть закрывающую фигурную скобку, объект pqs будет удален, он будет очищен и закрыт, и задание будет отображаться в очереди целевого принтера.Выполнение не оставляет закрывающую фигурную скобку до тех пор, пока задание не будет обработано в очереди.

Если XPS сложный и обработка занимает много времени, и я отменяю задание в очереди принтера, это нене исчезают из очереди.Это не приводит к быстрому возврату из Dispose - фактически задание не исчезает из очереди до тех пор, пока принтер не закончит с ним.Описание задания изменяется, показывая, что оно удаляется, но не исчезает из очереди.

Если я завершаю работу моего приложения, отмененное задание немедленно исчезает из очереди печати. ​​

У меня вопрос: как я могу заставить операцию «Отмена» из очереди печати подчиняться моему коду, чтобы задание исчезало сразу после его отмены?

[[Я также пытался использовать CopyToAsync, так какподдерживает токен отмены, но я не смог увидеть какие-либо операции с очередями вообще с использованием этого вызова функции.]]

...