0

プログラムで WPF を閉じるにはどうすればよいPrintDialogですか? リフレクションを通してそれを呼び出そうとしFinalizeましたが、それでも閉じません。これが私が試したものです:

using System;
using System.Reflection;
using System.Threading;
using System.Windows;
using System.Windows.Controls;

namespace WpfApplication15
{
    partial class Window1 : Window
    {
        PrintDialog _printDialog;

        public Window1()
        {
            InitializeComponent();
            new Thread(OpenDialog).Start();
            new Thread(CloseDialog).Start();
        }

        void OpenDialog()
        {
            Thread.Sleep(1000);
            Dispatcher.BeginInvoke((Action)OpenDialogImpl);
        }

        void OpenDialogImpl()
        {
            _printDialog = new PrintDialog();
            _printDialog.ShowDialog();
        }

        void CloseDialog()
        {
            Thread.Sleep(2000);
            Dispatcher.BeginInvoke((Action)CloseDialogImpl);
        }

        void CloseDialogImpl()
        {
            var type = typeof(PrintDialog);
            var flags = BindingFlags.Instance | BindingFlags.NonPublic;
            var finalize = type.GetMethod("Finalize", flags);
            finalize.Invoke(_printDialog, null);
            MessageBox.Show("Finalized");
        }
    }
}
4

1 に答える 1

0

内部的には、PrintDialogクラスはメソッドWin32PrintDialogのローカル変数として a をShowDialog()使用し、最終的には Windows 共通ダイアログを使用します。リフレクションを使用して何かを閉じようとすることは、無駄であるか、少なくとも腹立たしいことです。

私はそれを使用していないので、ストレッチですが、Wh​​ite を使用して、ダイアログの [キャンセル] ボタンにボタンを押すことを発行することは可能かもしれませ。UISpy (ホワイト ページに記載) も、その目的に役立つ可能性があります。

于 2010-02-18T21:30:56.607 に答える