如何排队系统进程启动

本文关键字:系统进程 启动 排队 何排队 | 更新日期: 2023-09-27 18:21:17

我已经编写了以下代码来循环加载数据表行,并在不存在PDF的情况下生成PDF。它是有效的,但它一次启动了wkhtmltoPDF,所以启动了30个进程并杀死了服务器,哦!

一次启动一个进程,而在前一个进程运行之前不启动第二个进程的最佳方式是什么?

   DB db = new DB();
            DataTable dtPosters = db.GetDataTable("select * from Invoices where PDFGenerated <> 1 or PDFGenerated is Null");
            foreach (DataRow DR in dtPosters.Rows)
            {
                //Generate Poster, If exsists (Don't!)
                Directory.CreateDirectory(string.Format("D:''Invoices''"));
                string FilePath = string.Format("D:''Invoices''{0}.pdf", DR["InvoiceNumber"].ToString());
                if (!File.Exists(FilePath))
                {
                    string CMD = string.Format("C:''Services''Automafe''wkhtmltoPDF.exe http://invoicegen/viewinvoice.aspx?InvoiceNumber={0} {1}", DR["InvoiceNumber"].ToString(), FilePath);
                    System.Diagnostics.Process.Start("cmd", "/c " + CMD);
                }
                else
                {
                    //Update the DB
                }
            } 

如何排队系统进程启动

Process.Start返回一个Process对象,用于监视新创建的进程的状态。

一个简单的阻塞方法是让每个工人等待进程退出

var myProcess = System.Diagnostics.Process.Start("cmd", "/c " + CMD);
myProcess.WaitForExit();

更好的方法是使用Exited事件处理程序来监视进程何时退出。

var myProcess = System.Diagnostics.Process.Start("cmd", "/c " + CMD);
myProcess.Exited += myProcessFinishedHandler;