线程池内调用可执行程序
这里我直接贴出我怎么实现的不懂得可以留言问我:
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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界