C#学习教程:使用进程间同步对象——Mutex或AutoResetEvent同步2个进程必须正在运行,并且我的第一个进程在第二个进程完成内部特定初始化之前无法继续。例如:...//Process1代码在这里进行各种初始化Process.Start("Process2.exe");//等到Process2完成初始化,然后才继续(Process2不会退出)...我看到了几个两个选项:Mutex-在考虑进程间通信时会自动想到Mutex,但是,我没有看到一种方法让Process1等待他自己生成的互斥量。我可以让Process2创建一个互斥量并等待Process1,直到创建互斥量(使用轮询和Mutex.OpenExisting函数)AutoResetEvent-这些对于任务来说是完美的,但是,在.NET下它们似乎不能用于进程间通信。CreateEvent-我可以使用P/Invoke并使用Win32CreateEvent函数。理论上,它可以给我我需要的一切。但是,如果可能的话,我宁愿不使用本机函数。使用外部文件——最简单的方法是使用一些操作系统外部对象(文件、注册表等)。但是,这似乎很老套。我很想听听你对这个案子的看法。谢谢!我只是想编辑这个答案,但它似乎不对。所以我将发布我自己的...根据具有大量同步教程的C#线程页面,AutoResetEvent不能用于进程间同步。但是,命名的EventWaitHandle可用于进程间同步。在上面的页面上,访问创建跨进程EventWaitHandle部分。您设置它的方式很简单:Process1EventWaitHandlehandle=newEventWaitHandle(false,/*Createhandleinunsignaledstate*/EventResetMode.ManualReset,/*Ignored.Thisinstancedoesn'treset.*/InterprocessProtocol.EventHandleName/*在共享程序集中定义的字符串。*/);ProcessStartInfostartInfo=newProcessStartInfo("Process2.exe");using(Processproc=Process.Start(startInfo)){//等待进程2初始化.handle.WaitOne();//TODO}Process2//做一些冗长的初始化工作...EventWaitHandlehandle=newEventWaitHandle(false,/*Parameterignoredsincehandlealreadyexists.*/EventResetMode.ManualReset,/*下面解释。*/InterprocessProtocol.EventHandleName/*在共享程序集中定义的字符串。*/);handle.Set();//释放等待句柄的线程。现在,关于EventResetMode。选择EventResetMode.AutoReset还是EventResetMode.ManualReset取决于您的应用。就我而言,我需要手动重置,因为我有许多进程连接到同一个进程。因此,一旦使用同一进程完成初始化,所有其他进程都应该能够工作。因此,手柄应保持信号状态(而不是重置)。对于您来说,如果每次进程1启动进程2时都必须执行初始化,自动重置可能会有所帮助。附注:InterprocessProtocol.EventHandleName只是包含在DLL中的常量,其中包括进程1和进程2引用。您不需要这样做,但它可以防止您输入错误的名称并导致死锁。我会考虑**AutoResetEvent**。它们可用于进程间通信,而且速度相对较快。请参考以下链接:Topicsofc#ReadthesectionCreatingacross-processEventWaitHandle...以上是C#学习教程:Synchronize2processesusinganinter-processsynchronizationobject-MutexorAutoResetEvent分享所有内容,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注—本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
