将进程启动延迟到父进程关闭
本文关键字:进程 延迟 启动 迟到 | 更新日期: 2023-09-27 18:31:23
我有一个进程 A 启动进程 B。进程 B 更改了进程 A 的一些文件,因此我需要在进程 B 中延迟让进程 A 关闭自己。
目前,我已经建立了两种解决方案。
解决方案1:引用链接 "我能想到的唯一方法是编写第二个程序,等待30秒并加载所需的程序,您调用该程序并关闭第一个程序,第二个程序等待30秒,然后首先加载您想要的程序。
这项工作,但第三个程序有点差优雅,如果你明白我的意思。
解决方案2:很简单,只需在逻辑启动之前在进程B中放置一个Thread.Sleep(我可以控制进程A和B)。这也行得通,而且是个坏主意...
我问是因为我正在寻找一种方法来将进程 A 上的调用参数传递给 processB.start,这样它就可以更干净/优雅的解决方案。
有两种实际方法可以做到这一点。
首先,您可以使用操作系统级别的同步对象,例如 Mutex
。在第一个应用中,创建新的命名Mutex
并在应用关闭之前将其释放。在第二个应用程序等待Mutex由WaitOne
发布。
第一个进程应创建新的互斥锁并阻止其他进程:
Mutex mtx = new Mutex(true, "SomeName");
// start second process
mtx.ReleaseMutex();
第二道工序:
Mutex mtx = new Mutex(false, "SomeName");
// next line will block current thread until mutex will be released
mtx.WaitOne();
// your logic here
您还可以检查第二个应用程序中正在运行的进程,并等待第一个应用程序关闭:
while(Process.GetProcessesByName("YourFirstProcessName").Any())
{
Thread.Sleep(1000);
}
请记住,这两种解决方案都涉及开销,因为互斥是操作系统级别的同步对象,Process.GetProcessesByName
也调用外部 API。