0

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

4

1 に答える 1

0

DispatcherUI スレッドでデリゲートを実行するためにここにありDispatcher.Invoke()、Dispatcher が関連付けられているスレッドでデリゲートを同期的に実行します ( msdnを参照)。

必要なのは かもしれませんし、クラスをDispatcher.BeginInvoke()使用して実際のバックグラウンド操作を行う必要もあります。BackgroundWorker

使用することもお勧めしますApplication.Current.Dispatcher(この質問を参照してください: Dispatcher.CurrentDispatcher と Application.Current.Dispatcher の比較)

于 2013-10-03T07:49:36.723 に答える