是否可以在Silverlight中打印而不阻塞UI线程?
我不得不打印大量的页面,因此我的UI冻结了一段时间。我想在后台线程上打印(如果可能的话更新一个进度条),但不知道怎么做。
我尝试在PrintDocument的DoWork()方法中调用BackgroundWorker的DoWork()方法,但这给了我一个UnauthorizedAccessException "Invalid cross-thread access"。
在UI线程之外,即使启动PrintDocument也是不可能的:PrintDocument pd = new PrintDocument();在BackgroundWorker.DoWork()中抛出了相同的异常。
我发现了很多帖子,人们说必须在UI线程上进行打印,但没有这方面的文档。我对多线程很陌生,所以任何指向正确方向的指针都会很感激。
发布于 2012-07-26 16:25:24
我遇到了这个问题,遇到了这个问题,不幸的是,这个问题并没有我所期望的答案。但我认为,对于任何遇到这一问题的人来说,这至少可以提供一些启示。
我跟随这篇文章在Silverlight中打印,它的工作原理就像在UI线程上进行常规打印一样,但实际上尝试在单独的线程上打印,我认为这是不可能的。我删除了示例中的最后一行代码。
printDocument.Print("SLPrintDemo document");有个备用的,看能不能用
new Thread(() => printDocument.Print("SLPrintDemo document")).Start();查看打印作业本身是否会在单独的线程中生成。但是,尽管代码编译和运行良好,但文档不会打印。原因似乎是,一旦启动Print命令,它就会启动打印选项对话框,用于选择打印机和其他选项等。此时,它不再在UI线程上运行,所以什么也不会发生(没有例外,所以我假设它们在某个地方被吞没了)。
因此,据我目前所知,没有办法在Silverlight中打印,而这不是UI线程中的。
发布于 2012-05-01 10:47:21
使用调度程序更新UI。例如:
Dispatcher.BeginInvoke(() =>
{
ProgressBar.Value = 100;
});https://stackoverflow.com/questions/10396207
复制相似问题