线程池内调用可执行程序

这里我直接贴出我怎么实现的不懂得可以留言问我:

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;
}

posted @ 2022-04-11 11:02  薛小谦  阅读(43)  评论(0编辑  收藏  举报