2010-02-18 5 views
0

Comment fermer un fichier WPF PrintDialog? J'ai essayé d'appeler Finalize à travers la réflexion, et cela ne le ferme pas non plus. Voici ce que j'ai essayé avec:WPF: Comment est-ce que je peux fermer un 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

Y at-il une raison pour laquelle l'utilisateur ne peut pas fermer cette boîte de dialogue manuellement? Peut-être que vous pourriez poster un peu d'information de fond à votre problème, cela pourrait aider. Merci! – Pwninstein

+0

Je veux implémenter la déconnexion automatique. –

+0

J'ai eu un problème similaire et j'ai posté une réponse ici; http://stackoverflow.com/questions/17282082/wpf-accessing-opened-print-dialog-et-close-them –

Répondre

0

En interne, la classe PrintDialog utilise un Win32PrintDialog comme une variable locale à la méthode ShowDialog(), qui se termine RETOURNEZ utilise les fenêtres de dialogue commune. En utilisant la réflexion pour arriver à quelque chose à fermer, il pourrait être futile, ou au moins affolant.

Juste un étirement, comme je ne l'ai pas utilisé, mais il peut être possible d'utiliser White pour émettre un bouton appuyer sur le bouton Annuler de la boîte de dialogue. UISpy (mentionné sur la page blanche) pourrait être utile à cette fin, aussi.

Questions connexes