我有一个基于 DocumentViewer 的带有自定义控件的 WPF 应用程序。有一个“打印”按钮,它会导致打印机选择对话框。当我选择某个打印机(“novaPDF Lite Server v7”)然后按“打印”按钮时,会显示一个带有打印机设置的对话框。该对话框作为单独的应用程序出现在任务栏中。
当我激活该打印机对话框,然后激活其他一些应用程序,然后切换回 WPF 应用程序时,它的客户端(标题栏下方的所有内容)都是白色的。它看起来好像挂了。
当我关闭打印机设置对话框时,WPF 应用程序开始以正常方式显示(所有控件都在那里)。
我想问题是由打印过程的启动方式引起的。也许它可以通过在单独的线程中进行打印来修复。
现在是这样完成的:
using System.Printing;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
namespace MyControls
{
public class MyDocumentViewer : DocumentViewer
{
[...]
protected override void OnPrintCommand()
{
base.OnPrintCommand();
this.FirePrintFinished();
}
[...]
}
我能做些什么来解决这个问题?
更新 1 (03.09.2013):更改以MyDocumentViewer
异步方式完成打印并没有帮助。
namespace MyControls
{
public class MyDocumentViewer : DocumentViewer
{
[...]
protected override void OnPrintCommand()
{
var worker = new PrintWorker(this);
Dispatcher.Invoke(new Action(worker.DoWork));
}
public void OnPrintCommandBase()
{
base.OnPrintCommand();
}
[...]
}
public class PrintWorker
{
private readonly MyDocumentViewer _myDocumentViewer;
public PrintWorker(MyDocumentViewer myDocumentViewer)
{
_myDocumentViewer = myDocumentViewer;
}
public void DoWork()
{
_myDocumentViewer.OnPrintCommandBase();
_myDocumentViewer.FirePrintFinished();
}
}
}
更新 2(05.09.2013):只有当我通过远程桌面使用应用程序访问机器时,才能重现该问题(如果我在本地运行程序,则不会发生)。