我有一个启动流程B的流程A.流程B更改了流程A的一些文件,所以我需要在流程B中延迟让流程A关闭自己。
目前我已经找到了两个解决方案。
解决方案1:引用link“我能想到的唯一方法就是编写第二个等待30秒并加载所需程序的程序,调用该程序并关闭第一个程序,第二个等待30秒然后加载你想要的那个。“
这项工作,但如果你知道我的意思,第三个程序就会变得不那么优雅了。
解决方案2:简单,只需在逻辑启动之前在进程B中放入一个Thread.Sleep(我控制进程A和B)。这项工作也是如此,并且不是坏主意......
我问,因为我正在寻找一种方法将过程A上的调用参数传递给processB.start,因此它可以提供更干净/更优雅的解决方案。
答案 0 :(得分:2)
有两种实际的方法可以做到这一点。
首先,您可以使用操作系统级别同步对象,如Mutex
。在您的第一个应用中,在应用关闭之前创建新的名为Mutex
和release的应用。在第二个应用中等待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。