我想在一个不保持FIFO的foreach循环中打印pdf文件。使用并发队列应用偶数锁和信号量。但是,有时会错过序列。如何使打印过程保持确认FIFO和线程安全?我的代码如下,
foreach(string pfile in printdoc)
{
ProcessStartInfo info = new ProcessStartInfo();
info.Verb = "print";
info.CreateNoWindow = true;
info.FileName = pfile;
info.WindowStyle = ProcessWindowStyle.Hidden;
Process p = new Process();
p.StartInfo = info;
p.Start();
}
答案 0 :(得分:0)
在开始下一次尝试之前,您需要完成前一个。在末尾抛出p.WaitForExit()
以等待打印完成,然后排队下一个。
foreach(string pfile in printdoc)
{
ProcessStartInfo info = new ProcessStartInfo();
info.Verb = "print";
info.CreateNoWindow = true;
info.FileName = pfile;
info.WindowStyle = ProcessWindowStyle.Hidden;
//You can shorten your existing code to a single line using Process.Start(
Process p = Process.Start(info);
p.WaitForExit();
}
对于线程安全,它取决于什么类型的集合printdoc
,最简单的解决方案是使用BlockingCollection<string>
并使您的foreach进入foreach(string pfile in printdoc.GetConsumingEnumerable())