循环中的Process.start()不会保持FIFO

时间:2017-06-03 18:29:54

标签: c# .net

我想在一个不保持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();
}

1 个答案:

答案 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())