Multithreading 使用MS Office Word打印到特定打印机(多线程,无默认打印机使用)

Multithreading 使用MS Office Word打印到特定打印机(多线程,无默认打印机使用),multithreading,printing,ms-word,ole,Multithreading,Printing,Ms Word,Ole,我想要实现的是使用word多线程打印到特定的打印机。 它的工作方式是使用 Word.Application.ActivePrinter = "printer name"; 它会更改windows上的默认打印机,并在打印时使用该打印机。 然而,在多线程环境中,其他线程可以在其word对象上更改活动打印机,并且会在所有word.ActivePrinter上更改它,因为它们“绑定”到默认打印机。 现在,我刚刚在activepriter上使用了lock()和printout()方法。但是这种方法太慢了

我想要实现的是使用word多线程打印到特定的打印机。 它的工作方式是使用

Word.Application.ActivePrinter = "printer name";
它会更改windows上的默认打印机,并在打印时使用该打印机。 然而,在多线程环境中,其他线程可以在其word对象上更改活动打印机,并且会在所有word.ActivePrinter上更改它,因为它们“绑定”到默认打印机。 现在,我刚刚在activepriter上使用了lock()和printout()方法。但是这种方法太慢了,整个更换活动打印机需要相当长的时间。加上锁,整个程序会变慢

所以我要问的是,有没有一种方法可以在不使用/更改默认打印机的情况下打印到指定的打印机,如果有,我应该在哪里查找,在哪里可以找到它

问候

编辑: 我们发现:

我的解决方案:

 object wordBasic = word.WordBasic;
 wordBasic.GetType().InvokeMember("FilePrintSetup",
     System.Reflection.BindingFlags.InvokeMethod,
     null,
     wordBasic,
     new object[] {PrinterName,true },
     null,
     null,
     new string[] {"Printer", "DoNotSetAsSysDefault" });
有了它,我可以一次打印多个文档。

解决方案:

 object wordBasic = word.WordBasic;
 wordBasic.GetType().InvokeMember("FilePrintSetup",
     System.Reflection.BindingFlags.InvokeMethod,
     null,
     wordBasic,
     new object[] {PrinterName,true },
     null,
     null,
     new string[] {"Printer", "DoNotSetAsSysDefault" });
object wordBasic = word.WordBasic;
wordBasic.GetType().InvokeMember("FilePrintSetup",
   System.Reflection.BindingFlags.InvokeMethod,
   null,
   wordBasic,
   new object[] {PrinterName,true },
   null,
   null,
   new string[] {"Printer", "DoNotSetAsSysDefault" });

找到:

我认为不支持运行多个Word实例或尝试多线程。我在自己的实例中运行每个Word,除了activeprinter之外,它工作正常。我发现我可以使用wordbasic,我似乎无法在我的机器上工作