C# 如何在.net多进程环境中限制方法一次执行
我有一个exe,它将调用其他exe的四个实例。因此第二个exe的C# 如何在.net多进程环境中限制方法一次执行,c#,.net,C#,.net,我有一个exe,它将调用其他exe的四个实例。因此第二个exe的Main方法有以下代码。但是有两个调用(args[1]=“Test”)的情况将发生。我想阻止第二个调用ie,想执行两个方法(firstmethod(),secondmethod())仅限一次。如何操作 这些都是这四个调用的 args[0] =="leaf" args[1] =="Test" args[0] =="seat" args[1] =="Test" args[0] =="kite"
Main
方法有以下代码。但是有两个调用(args[1]=“Test”)
的情况将发生。我想阻止第二个调用ie,想执行两个方法(firstmethod(),secondmethod())
仅限一次。如何操作
这些都是这四个调用的
args[0] =="leaf" args[1] =="Test"
args[0] =="seat" args[1] =="Test"
args[0] =="kite" args[1] =="leveller"
args[0] =="micky" args[1] =="sasi"
这是第二个exeMain
方法中的代码
if (args[1]=="Test")
{
firstmethod();
secondmethod();
}
要限制跨多个进程的活动,需要一个
互斥锁
。工作流程可能如下所示:
second.exe
进程已启动
if (args[1]=="Test")
{
bool mutexWasAcquired = AcquireMutex();
if (mutexWasAcquired)
{
if (CheckIfMethodsHaveBeenRun() == false)
{
firstmethod();
secondmethod();
IndicateMethodsHaveBeenRun();
}
ReleaseMutex();
}
}
为了指示这些方法已经运行,成功运行这些方法的第一个进程可以创建一个用作进程间指示符的文件。如果再次运行first.exe
,则应检查并删除该文件。这只是一个例子
请注意,这是具体和关键的。我不能说我完全理解您的问题,但可能只是存储一个列表,列出已经调用了哪些进程(例如
Test
),并将检查合并到if()
?(如果(args[1]=“Test”&&!alreadyInvoked.Contains(“Test”))
)-同样,我可能完全错了,但是我不太明白你想要完成什么。我说的是接收端ie second EXE。你说的是调用端ie first EXE。这在这里不起作用,因为我想要4次调用这个second EXE,对于这个特定的块,从你描述的只调用一次,听起来你需要使用一些将互斥锁与IPC的某些方式(可能是锁文件或映射内存之类的简单方式)相结合,以告知进程已运行。