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, так какподдерживает токен отмены, но я не смог увидеть какие-либо операции с очередями вообще с использованием этого вызова функции.]]