2010-01-06 4 views
3

Je reçois une étrange exception du code suivant:PrintDocument.Print() jette un Win32Exception

var printDialog = new PrintDialog(); 
     printDialog.ShowDialog(); 

     var printDocument = new PrintDocument { DefaultPageSettings = { Landscape = true, PrinterSettings = new PrinterSettings { PrinterName = printDialog.PrintQueue.Name } } }; 

     var updateResult = new UpdateResult<Image>(UpdateType.Print) { Success = true }; 
     foreach (string location in fileLocation) 
     { 
      try 
      { 
       _printImage = Image.FromFile(location); 
       printDocument.PrintPage += PrintRequest; 
      } 
      catch (Exception exception) 
      { 
       //various error handling code here 
      } 
     } 
     printDocument.Print(); 

La dernière ligne est de lancer un Win32Exception avec le détail « La poignée est invalide », selon le msdn documentation la seule exception qui devrait être levée est l'imprimante introuvable. L'exception semble être une sorte d'exception de pilote/non-cadre. Lorsque je sélectionne mon imprimante (Lexmark T640, configuration pour imprimer directement sur le port de l'imprimante), le code s'imprime bien, mais en sélectionnant l'une des deux autres imprimantes auxquelles j'accède (une autre T640, ou une couleur Dell) le code échoue. Les deux autres imprimantes sont configurées pour imprimer via notre serveur d'impression central, mais je ne pense pas que cela puisse faire la moindre différence. Quelqu'un peut-il me donner des pointeurs? Editer: Je l'ai essayé avec printDialog.PrintQueue.Fullname et le comportement n'est pas différent. La substitution dans un nom d'imprimante de rebut jette une exception InvalidPrinterException comme prévu, suggérant qu'il a trouvé l'imprimante, mais semble échouer.

+0

avez-vous résolu ce problème? –

+0

@Matt Voir ma réponse ci-dessous – ChrisFletcher

Répondre

0

Pour @ bénéfice de Matt. Je n'ai pas réussi à comprendre quel était le problème à la fin, cela pourrait bien être lié à la configuration de notre réseau, mais c'est hors de ma portée.

Au lieu j'ai utilisé une méthode différente, j'ai utilisé CommonDialogClass.ShowPhotoPrintingWizard() qui fait partie de Interop.WIA comme ci-dessous.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms630492%28v=vs.85%29.aspx

Ce mains sur le processus de l'assistant d'impression photo et je ne l'ai pas eu de problèmes depuis.

0

Essayez le réglage de l'imprimante cible comme imprimante par défaut (si elle est pas déjà) et voir s'il arrive encore

+0

J'ai le même problème. Changer l'imprimante par défaut a corrigé le problème mais ce n'est pas une solution utilisable pour moi puisque l'utilisateur doit pouvoir imprimer sur n'importe quelle imprimante sur leur machine et je ne peux pas m'attendre à ce qu'ils changent constamment leurs valeurs par défaut avant chaque impression. Une idée de comment se comporter correctement avec PrintDocument? – Bitfiddler

0

J'ai reçu cette exception uniquement lors de l'impression de plusieurs documents. Mes solutions consistaient à ajouter

printDocument.Dispose(); après printDocument.Print();.

Questions connexes