.net PrintDialog:调用线程无法访问此对象,因为其他线程拥有它
我正在尝试编写一个充当后台打印程序的服务:它等待文档打印,并使用正确的设置(存储在打印票据中)在正确的打印机上打印 每次有一堆文档出现时,都会为每个设置创建一个线程,并在线程中并行打印文档 当我使用WPF应用程序时,它可以工作,但当我在windows服务中使用相同的代码时,我在PrintDialog.PrintVisual函数调用中遇到以下错误: 调用线程无法访问此对象,因为其他线程拥有它 在谷歌上搜索这个错误时,我经常会得到这样的结果,但它没有提供PrintVisual功能 关于如何消除这个错误还有其他想法吗.net PrintDialog:调用线程无法访问此对象,因为其他线程拥有它,.net,multithreading,printdialog,.net,Multithreading,Printdialog,我正在尝试编写一个充当后台打印程序的服务:它等待文档打印,并使用正确的设置(存储在打印票据中)在正确的打印机上打印 每次有一堆文档出现时,都会为每个设置创建一个线程,并在线程中并行打印文档 当我使用WPF应用程序时,它可以工作,但当我在windows服务中使用相同的代码时,我在PrintDialog.PrintVisual函数调用中遇到以下错误: 调用线程无法访问此对象,因为其他线程拥有它 在谷歌上搜索这个错误时,我经常会得到这样的结果,但它没有提供PrintVisual功能 关于如何消除这个错
感谢您的帮助问题在于您试图打印的文档或可视文档当前显示在UI线程上。为了避免这种情况,您需要重新创建视觉效果。这意味着您需要像复制构造函数这样的东西。这意味着您需要执行
ControlX doc=new ControlX(visualToPrint)
,这将在非UI线程上创建对控件的新引用。从那时起,由于线程创建了自己的控件副本,它现在可以更改它并按自己的意愿打印它
请记住,成功重新创建控件后,您需要强制执行新的布局过程,因为您没有调用.Show()
。请致电:
.Measure(Rect)代码>
.Arrange(点、直线)代码>
.UpdateLayout()代码>