在C++中,对跨进程使用各种同步的方法,用得还是比较多的,但在C#中跨进程编程就比较少了,更多的使用了其它一些机制,特别是WCF做为一种分布式编程的技术逐渐被推广后,也越来越方便了。
原来在线程间使用事件,大多使用这两个AutoResetEvent 和ManualResetEvent,但在跨进程中使用就不可以了。这时候就得祭出他们两个的父类EventWaitHandle,大家看一下他的重载构造函数:
EventWaitHandle(Boolean, EventResetMode)
EventWaitHandle(Boolean, EventResetMode, String)
EventWaitHandle(Boolean, EventResetMode, String, Boolean )
EventWaitHandle(Boolean, EventResetMode, String, Boolean , EventWaitHandleSecurity)
详细的说明大家去看MSDN,这里不再抄一遍了。
这里说明的是上面的构造函数中的String的参数指的就是C++里的事件的名称,或者你可以叫有名事件,(互斥体也是类似)这样,在一个进程中创建一个事件时,就可以在另外一个进程中通下面这个函数,利用这个名字参数打开一个这个事件的句柄并进行控制,当然,在MSDN中也说明了,这个函数每次打开后返回的句柄未必是同一个。
EventWaitHandle.OpenExisting("XXX");
举一个小例子:
A进程:
static EventWaitHandle evh = new EventWaitHandle(false,0,"test");
private void button2_Click(object sender, EventArgs e)
{
evh.Set();
}
B进程:
static EventWaitHandle evh = EventWaitHandle.OpenExisting("test");
static void Main(string[] args)
{
bool t = evh.WaitOne();
if (t)
{
return;
}
}