我正在使用COM和Acrobat SDK打印PDF的应用程序。该应用程序是用C#,WPF编写的,我试图弄清楚如何在单独的线程上正确运行打印。我已经看到BackgroundWorker使用线程池,因此不能设置为STA。我知道如何创建一个STA线程,但我不确定我会怎样从STA线程报告进度:从COM/STA线程向WPF UI线程报告进度
Thread thread = new Thread(PrintMethod);
thread.SetApartmentState(ApartmentState.STA); //Set the thread to STA
thread.Start();
thread.Join(); //Wait for the thread to end
如何在这样创造了一个STA线程报告进度我的WPF的ViewModel?
但是COM组件也需要在STA线程中运行,并且我不希望它在UI线程中运行,因为它需要很长时间。 – jle
@jle:是的,COM可以在自己的STA线程中运行。无论如何,UI线程也是一个STA。如果你不能使用'BackgroundWorker'(因为它的工作线程不是STA),你可以用'Dispatcher.BeginInvoke'来报告进度。 – Vlad
所以有这样的:http://dotnetventures.wordpress.com/2011/07/30/maintaining-a-wpf-applications-ui-responsive-while-calling-com-objects/,它显示了如何去做,但我不明白为什么我会这样做,当我可以创建一个调度程序线程? – jle