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 (2013 年 5 月 9 日):この問題は、リモート デスクトップ経由でアプリケーションを使用してマシンにアクセスした場合にのみ再現できます (プログラムをローカルで実行した場合は発生しません)。