Silverlight 5:在UI线程外打印?

时间:2012-05-01 10:06:01

标签: multithreading silverlight printing backgroundworker ui-thread

是否可以在不阻止UI线程的情况下在Silverlight中打印?

我必须打印很多页面,因此我的UI冻结了一段时间。我希望在后台线程上打印(如果可能的话更新进度条),但无法弄清楚如何。

我尝试在Print()的{​​{1}}方法中调用PrintDocument DoWork()方法,但这会给我一个BackgroundWorker

似乎在UI线程外部甚至无法启动PrintDocument: <{1}}中的UnauthorizedAccessException "Invalid cross-thread access"会引发相同的异常。

我发现了很多帖子,人们说打印必须在UI线程上进行,但没有相关文档。我是多线程的新手,所以任何正确方向的指针都会受到赞赏。

2 个答案:

答案 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;
    });