首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Silverlight 5:在UI线程之外打印?

Silverlight 5:在UI线程之外打印?
EN

Stack Overflow用户
提问于 2012-05-01 10:06:00
回答 2查看 1.3K关注 0票数 1

是否可以在Silverlight中打印而不阻塞UI线程?

我不得不打印大量的页面,因此我的UI冻结了一段时间。我想在后台线程上打印(如果可能的话更新一个进度条),但不知道怎么做。

我尝试在PrintDocumentDoWork()方法中调用BackgroundWorkerDoWork()方法,但这给了我一个UnauthorizedAccessException "Invalid cross-thread access"

在UI线程之外,即使启动PrintDocument也是不可能的:PrintDocument pd = new PrintDocument();BackgroundWorker.DoWork()中抛出了相同的异常。

我发现了很多帖子,人们说必须在UI线程上进行打印,但没有这方面的文档。我对多线程很陌生,所以任何指向正确方向的指针都会很感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-26 16:25:24

我遇到了这个问题,遇到了这个问题,不幸的是,这个问题并没有我所期望的答案。但我认为,对于任何遇到这一问题的人来说,这至少可以提供一些启示。

我跟随这篇文章在Silverlight中打印,它的工作原理就像在UI线程上进行常规打印一样,但实际上尝试在单独的线程上打印,我认为这是不可能的。我删除了示例中的最后一行代码。

代码语言:javascript
复制
printDocument.Print("SLPrintDemo document");

有个备用的,看能不能用

代码语言:javascript
复制
new Thread(() => printDocument.Print("SLPrintDemo document")).Start();

查看打印作业本身是否会在单独的线程中生成。但是,尽管代码编译和运行良好,但文档不会打印。原因似乎是,一旦启动Print命令,它就会启动打印选项对话框,用于选择打印机和其他选项等。此时,它不再在UI线程上运行,所以什么也不会发生(没有例外,所以我假设它们在某个地方被吞没了)。

因此,据我目前所知,没有办法在Silverlight中打印,而这不是UI线程中的。

票数 1
EN

Stack Overflow用户

发布于 2012-05-01 10:47:21

使用调度程序更新UI。例如:

代码语言:javascript
复制
Dispatcher.BeginInvoke(() =>
    {
        ProgressBar.Value = 100;
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10396207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档