2014-11-24 76 views
0

我想写充当打印后台程序服务:它等待文档打印和打印用正确的设置正确的打印机上(存储在PrintTicket中)。PrintDialog类:因为不同的线程拥有它调用线程不能访问该对象

每次一堆文件即将一个线程为每个设置创建和文档打印在其螺纹平行。

它的工作原理,当我使用WPF应用程序,但是当我在一个窗口服务使用相同的代码我上PrintDialog.PrintVisual函数调用此错误:

调用线程不能访问此对象,因为不同的线程拥有它

在谷歌上搜索这个错误,我经常用这个thread safe print dialog结束了,但它并没有提供PrintVisual功能。

如何摆脱这种错误的任何其他想法?

感谢您的帮助

回答

0

的问题是,该文件,或视觉,那你要打印当前显示的UI线程。为了解决这个问题,你需要重新创建视觉效果。这意味着你需要像复制构造函数一样的东西。这意味着,你需要做的ControlX doc = new ControlX(visualToPrint)这将创造一个新的参照对非UI线程的控制。从那时开始,由于线程创建了自己的控件副本,现在可以更改它并打印它想要的内容。

记住,你成功地重新创建你需要强制执行新的布局传递,因为你不打电话.Show()控制后。做到这一点通过调用:

.Measure(Rect); .Arrange(Point, Rect); .UpdateLayout();

相关问题