1. 程式人生 > 其它 >執行緒池內呼叫可執行程式

執行緒池內呼叫可執行程式

這裡我直接貼出我怎麼實現的不懂得可以留言問我:

try
{
ThreadPool.SetMinThreads(10, 10);
Tesla tesla = new Tesla();
tesla.mre = new ManualResetEvent(false);
tesla.flowIdPaths = flowIdPaths;
manualResetEvents.Add(tesla.mre);// 這一步重要 一定需要將引數物件新增到List中,當方法執行完成的時候會修改為true
ThreadPool.QueueUserWorkItem(BiliBili, tesla);// 將方法排入多執行緒佇列,執行緒可用時執行
WaitHandle.WaitAll(manualResetEvents.ToArray());// 最多支援64執行緒
Console.WriteLine("結束了");
}
catch (Exception e)
{
Console.WriteLine("Error:" + e.Message);
}

 

static void BiliBili(object obj)
{
Tesla tesla = obj as Tesla;

foreach (var item in tesla.flowIdPaths)
{
var paPath = item.Split(".").FirstOrDefault();
var data = $"{item} {paPath}.pa 0";
var tz = $"{item} {paPath}.json {paPath}.bin {paPath}.hex";
Process process = new Process();//建立程序物件
ProcessStartInfo startInfo = new ProcessStartInfo("/root/SupportProgram/ProAnalysis", data); // 括號裡是(程式名,引數)
process.StartInfo = startInfo;
process.Start();
Process tzPath = new Process();//建立程序物件
ProcessStartInfo tzsartInfo = new ProcessStartInfo("/root/SupportProgram/pcap2featuresjson", tz); // 括號裡是(程式名,引數)
tzPath.StartInfo = tzsartInfo;
tzPath.Start();
}
tesla.mre.Set();//傳送訊號量 本執行緒執行完畢 / 重要
}

public class Tesla
{
public ManualResetEvent mre;
public List<string> flowIdPaths;
}