2010-02-18 3 views
0

프로그래밍 방식으로 WPF PrintDialog을 닫을 수 있습니까? 나는 물결 모양의 반사에 Finalize을 호출하려고 시도했는데, 그것도 닫히지 않았습니다.WPF : 프로그래밍 방식으로 PrintDialog를 닫을 수 있습니까?

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"); 
     } 
    } 
} 
+0

사용자가이 대화 상자를 수동으로 닫을 수없는 이유가 있습니까? 어쩌면 문제에 약간의 배경 정보를 게시 할 수 있습니다. 감사! – Pwninstein

+0

자동 로그 아웃을 구현하고 싶습니다. –

+0

비슷한 문제가있어서 여기에 답변을 게시했습니다. http://stackoverflow.com/questions/17282082/wpf-accessing-opened-print-dialog-and-close-them –

답변

0

내부적으로 PrintDialog 클래스가 차례로 끝나는 Windows 공용 대화 상자를 사용하는 ShowDialog() 방법에 지역 변수로 Win32PrintDialog를 사용 : 여기에 시도하는 것이다. 반사를 사용하여 닫을 수있는 것을 얻는 것은 쓸모 없거나 적어도 미친 듯합니다.

사용하지 않았으므로 White을 사용하여 대화 상자의 취소 버튼을 누르는 것이 가능할 수 있습니다. UISpy (White 페이지에 언급)는 그 목적으로도 유용 할 수 있습니다.