Я написал следующий код, чтобы обойти загрузку строк таблицы данных и создать 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
}
}
Вы можете добавить слушателя событий, чтобы увидеть, когда процесс закрыт, так как здесь: http://stackoverflow.com/a/8455896/575530 – dumbledad
Это одно еще лучше: 'process.WaitForExit()' HTTP : //stackoverflow.com/a/3147920/575530 – dumbledad