我设计了一个多线程应用程序,它在像 this 这样的专用线程中启动大多数窗口。 :

Thread newWindowThread = new Thread(new ThreadStart(ThreadStartingPoint)); 
newWindowThread.SetApartmentState(ApartmentState.STA); 
newWindowThread.IsBackground = true; 
newWindowThread.Start(); 

但是,如果在这些窗口中的一个线程中,我尝试通过简单地调用来打印一些东西
PrintDialog pDialog = new PrintDialog(); 
bool? doPrint = pDialog.ShowDialog(); 

我得到一个 TargetInvocationException - 它看起来 PrintDialog 与我的窗口不在同一个线程中。

有没有办法创建一个线程不可知(或“线程保存”)的 PrinterDialog ?

请您参考如下方法:

答案是here :

PrintDialog uses a private class Win32PrintDialog which seems to access Application.Current.MainWindow in order to get the parent HWND window handle to use as a native print dialog window parent



有人构建了一个启用线程的 PrintDialog here .这似乎是使打印在启用线程的应用程序中工作的唯一方法。

(我很想在这里重复代码,但它超过了答案的最大长度)

评论:
  • 系统图
  • System.Printing
  • System.Windows.Forms

  • 需要引用。


    评论关闭
    IT干货网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!