Можно ли печатать в Silverlight без блокировки нити пользовательского интерфейса?Silverlight 5: печать за пределами пользовательского интерфейса?
Мне нужно распечатать много страниц, и, следовательно, мой пользовательский интерфейс замерзает какое-то время. Я хотел бы напечатать на фоновом потоке вместо этого (и, если возможно, обновить индикатор выполнения), но не могу понять, как это сделать.
Я пытался называть Print()
метод моей PrintDocument
внутри DoWork()
метода BackgroundWorker
, но это дает мне UnauthorizedAccessException "Invalid cross-thread access"
.
Похоже, что даже инициирование PrintDocument невозможно за пределами потока пользовательского интерфейса: PrintDocument pd = new PrintDocument();
в BackgroundWorker.DoWork()
вызывает то же исключение.
Я нашел много сообщений, в которых люди говорят, что печать должна произойти в потоке пользовательского интерфейса, но нет документации по этому вопросу. Я новичок в многопоточности, поэтому любые указатели в правильном направлении будут оценены.
Хорошо, я использовал бы это, чтобы обновить интерфейс из-за пределов пользовательского интерфейса. Но как мне заставить печать работать в другом потоке в первую очередь? Может ли печать работать за пределами пользовательского интерфейса? – Phasma
Извините, я думаю, вы не можете. Диспетчер тоже не поможет. Существует аналогичная проблема http://stackoverflow.com/questions/4563831/how-can-i-display-a-busyindicator-during-printing-in-silverlight-4. – Zabavsky