是否可以在不阻止UI线程的情况下在Silverlight中打印?
我必须打印很多页面,因此我的UI冻结了一段时间。我希望在后台线程上打印(如果可能的话更新进度条),但无法弄清楚如何。
我尝试在Print()
的{{1}}方法中调用PrintDocument
DoWork()
方法,但这会给我一个BackgroundWorker
。
似乎在UI线程外部甚至无法启动PrintDocument:
<{1}}中的UnauthorizedAccessException "Invalid cross-thread access"
会引发相同的异常。
我发现了很多帖子,人们说打印必须在UI线程上进行,但没有相关文档。我是多线程的新手,所以任何正确方向的指针都会受到赞赏。
答案 0 :(得分:1)
我有这个问题并遇到了这个问题,遗憾的是我没有希望得到的答案。但我认为,对于遇到这个问题的任何人来说,这至少可以解释一下。
我在Silverlight上关注打印this article,它就像UI线程上常规打印的魅力一样,但实际上尝试在单独的线程上打印我认为不可能。我在示例
中切换了最后一行代码printDocument.Print("SLPrintDemo document");
用另一个来查看它是否可行
new Thread(() => printDocument.Print("SLPrintDemo document")).Start();
查看打印作业本身是否会在单独的线程中生成。但是,虽然代码编译并运行正常,但文档不会打印。原因似乎是一旦触发了Print命令,它就会启动打印选项对话框以选择打印机和其他选项等。此时它不再在UI线程上,所以没有任何反应(没有例外,所以我'假设他们被某处吞下去了
据我所知,目前没有办法在Silverlight中打印不在UI线程中。
答案 1 :(得分:0)
使用Dispatcher更新您的用户界面。例如:
Dispatcher.BeginInvoke(() =>
{
ProgressBar.Value = 100;
});