我的程序在新进程中通过PDF阅读器Foxit Reader
进行静默打印。
有时,我的程序会尝试同时打印两张PDF,导致其中一张PDF无法打印。
这是我的代码:
string filename = "file.pdf";
string fileDir1 = @"C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe";
Process pdfProcess = new Process();
pdfProcess.StartInfo.FileName = fileDir1;
pdfProcess.StartInfo.Arguments = string.Format(@"/t {0} {1}", filename ,"pos-80");
pdfProcess.StartInfo.CreateNoWindow = true;
pdfProcess.StartInfo.WorkingDirectory = Path.GetDirectoryName(fileDir1);
pdfProcess.Start();
if (!pdfProcess.WaitForExit(2500))
{
pdfProcess.Kill();
}
请帮我解决这个问题。
答案 0 :(得分:0)
确保你打开Foxit。
using System.Diagnostics;
List<Process> Processlist = Process.GetProcesses().ToList();
这为您提供了当前正在运行的进程的列表。
foreach(Process p in Processlist)
{
Console.WriteLine("Process " + p.Id + " is named '" + p.ProcessName + "'");
}
运行上面的代码时,您应该在输出窗口中看到Foxit进程的名称。
或者,在foreach行上放置一个断点并将鼠标悬停在列表上以查看所有名称。
bool IsFoxitProcessRunning = false;
foreach(Process p in Processlist)
{
if(p.ProcessName == "Foxit process name here") //Replace with the name of the foxit process
{
IsFoxitProcessRunning = true;
}
}
现在,只有在没有运行的情况下才启动新的Foxit进程。
if(!IsFoxitProcessRunning)
{
//insert code to run next foxit process here.
}
注意:
您可能需要实施一个队列来跟踪等待运行的pdfs。
如果Foxit等待的时间超过5或10分钟,您可能还需要提醒IT支持人员。
您可以选择将Processlist
作为类属性,并使用Timer
定期刷新Processlist,方法是在Tick事件上调用Processlist = Process.GetProcesses().ToList();
。 PDF等待打印时每30秒左右。