延迟过程开始,直到父进程关闭

时间:2016-01-21 13:52:48

标签: c# .net

我有一个启动流程B的流程A.流程B更改了流程A的一些文件,所以我需要在流程B中延迟让流程A关闭自己。

目前我已经找到了两个解决方案。

解决方案1:引用link“我能想到的唯一方法就是编写第二个等待30秒并加载所需程序的程序,调用该程序并关闭第一个程序,第二个等待30秒然后加载你想要的那个。“

这项工作,但如果你知道我的意思,第三个程序就会变得不那么优雅了。

解决方案2:简单,只需在逻辑启动之前在进程B中放入一个Thread.Sleep(我控制进程A和B)。这项工作也是如此,并且不是坏主意......

我问,因为我正在寻找一种方法将过程A上的调用参数传递给processB.start,因此它可以提供更干净/更优雅的解决方案。

1 个答案:

答案 0 :(得分:2)

有两种实际的方法可以做到这一点。

首先,您可以使用操作系统级别同步对象,如Mutex。在您的第一个应用中,在应用关闭之前创建新的名为Mutexrelease的应用。在第二个应用中等待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

您也可以在第二个应用中check running processes等待第一个应用关闭时停止:

while(Process.GetProcessesByName("YourFirstProcessName").Any())
{
    Thread.Sleep(1000);
}

请记住,这两个解决方案都涉及开销,因为Mutex是一个操作系统级同步对象,Process.GetProcessesByName也调用外部API。