Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “打印文档”;句柄无效";错误_C#_Printing - Fatal编程技术网

C# “打印文档”;句柄无效";错误

C# “打印文档”;句柄无效";错误,c#,printing,C#,Printing,当我尝试打印到默认打印机以外的命名打印机时,系统抛出异常“句柄无效”。但是,我使用PrinterSettings.IsValid在调用print之前进行检查,并且打印设置有效。当我将默认打印机更改为之前被称为“无效”的打印机时,异常消失。这不是一个令人满意的解决方案,因为我的用户需要在不同的打印机上打印不同的内容,他们不必离开应用程序来更改默认打印机。我还尝试使用PrinterName集创建“新”打印机设置对象,但这没有帮助 以前有人见过这个吗 代码有些不相关,因为只要您只打印到默认打印机,它就

当我尝试打印到默认打印机以外的命名打印机时,系统抛出异常“句柄无效”。但是,我使用PrinterSettings.IsValid在调用print之前进行检查,并且打印设置有效。当我将默认打印机更改为之前被称为“无效”的打印机时,异常消失。这不是一个令人满意的解决方案,因为我的用户需要在不同的打印机上打印不同的内容,他们不必离开应用程序来更改默认打印机。我还尝试使用PrinterName集创建“新”打印机设置对象,但这没有帮助

以前有人见过这个吗


代码有些不相关,因为只要您只打印到默认打印机,它就可以工作,但是我正在使用PrintDocument类来进行打印。

好的,一个难看的解决办法是以编程方式将默认打印机更改为目标打印机,打印文档,然后使用以下代码更改默认打印机:

[DllImport("Winspool.drv")]
private static extern bool SetDefaultPrinter(string printerName);
然后在我的打印部分:

var defaultPrinterName = _printDoc.PrinterSettings.PrinterName;
_printDoc.PrinterSettings.PrinterName = _settings.PrinterName;

if (_printDoc.PrinterSettings.IsValid)
{
    SetDefaultPrinter(_settings.PrinterName);
    _printDoc.Print();
    SetDefaultPrinter(defaultPrinterName); 
} 

您确定您有正确的打印机名称吗?我们使用相同的代码打印到预定义的pritner,从来没有遇到过任何问题。打印机名称应为InstalledPrinters列表的成员

System.Drawing.Printing.PrinterSettings.InstalledPrinters

你确定代码是不相关的吗?如果是的话,那么听起来你需要输入一张帮助热线的票证。我肯定。逻辑上,如果只要设置了默认打印机(这是在代码之外发生的事情),那么代码中不会出现错误,从而导致问题。除非PrintDocument/PrinterSettings本身有一个非常模糊的设置,这基本上就是问题所在。是的,我正在从这个集合填充的组合框中选择打印机。如果对我的问题有任何混淆,请不要更改我的任何代码,如果我只是将默认打印机更改为应用程序中选择的打印机,则所有打印机都会完全按照预期打印,不会出现错误。您是否在x64计算机上的x86进程中运行此操作?在这种情况下,你可以尝试使用任何CPU吗?是的,我使用的是x86版本,是的,这个应用程序主要在64位机器上运行。不幸的是,我不能使用任何CPU,因为这个项目与另一个项目共享一个库,为了兼容性,必须使用x86构建该库。