C# 如何为多个文档选择打印机?

C# 如何为多个文档选择打印机?,c#,wpf,printing,C#,Wpf,Printing,我有一个WPF应用程序和一个文档列表。我创建了一个“全部打印”按钮,用于将所有文档发送到默认打印机。我想让用户能够选择打印机,然后将所有文档发送到该打印机 但是如何显示打印对话框并保存打印机信息?关闭对话框后如何打印到特定打印机 我的打印功能中有这个功能,它可以正常工作(但用于错误的打印机) 你可以使用 一种常见的使用模式是 PrintDialog dialog = new PrintDialog(); if (dialog.ShowDialog() == true) { dialog.

我有一个WPF应用程序和一个文档列表。我创建了一个“全部打印”按钮,用于将所有文档发送到默认打印机。我想让用户能够选择打印机,然后将所有文档发送到该打印机

但是如何显示打印对话框并保存打印机信息?关闭对话框后如何打印到特定打印机

我的打印功能中有这个功能,它可以正常工作(但用于错误的打印机)

你可以使用

一种常见的使用模式是

PrintDialog dialog = new PrintDialog();
if (dialog.ShowDialog() == true)
{
    dialog.PrintVisual(visual, "Job Name");
    //dialog.PrintDocument(paginator, "Document Name");

}

如果要从文件打印,则需要加载该文件并创建一个。如何做到这一点取决于您试图打印的文件格式。

这只是一个线索,不是一个完整的答案,但我认为它可能会有所帮助

您可以列出打印机并使用windows注册表更改默认打印机

看一看


您可以使用.NET framework轻松地在注册表中读写。

感谢Ray提供的大量帮助

以下方法适用于选择打印机。当用户单击“打印”对话框上的“打印”时,将捕获打印机队列

publicprintqueue SelectPrinter()
{
var dialog=新建打印对话框();
if(dialog.ShowDialog()==true)
{
如果(dialog.PrintQueue!=null)
返回dialog.PrintQueue;
}
返回null;
}
然后,可以在打印多个文档时使用打印队列

。。。
var startInfo=新流程startInfo
{
CreateNoWindow=true,
Verb=“printTo”,
FileName=文件路径,

Arguments=printQueue.FullName,//谢谢您的提示,但我希望尽可能避免更改默认打印机。OK,paginator解决方案是否优于使用ProcessStartInfo with Verb=“printTo”?取决于您所说的更好。它允许您执行更多操作,如打印预览等,并允许用户设置打印选项(这就是你所需要的)。好的,谢谢,雷。打印选项很好。我想预览不止一个文档有点问题。另外,我的简单解决方案似乎经常在打印最后一个文档后让Acrobat reader打开。我将查看分页器。哦,PDF:(这不会很有趣。你可能需要一些第三方组件,所以可能不值得。你说得对,这一点都不有趣。如果我只是使用PrintTo动词将它们全部发送到打印机,那么在打印前一个文档之前,acrobat中似乎打开了一个文档。我可以让它等待,但我何时知道acrobat何时完成打印?
PrintDialog dialog = new PrintDialog();
if (dialog.ShowDialog() == true)
{
    dialog.PrintVisual(visual, "Job Name");
    //dialog.PrintDocument(paginator, "Document Name");

}