C#进程间使用同步EVENT事件

来源:互联网 发布:网络视频产业发展趋势 编辑:程序博客网 时间:2024/05/19 01:06

C++中,对跨进程使用各种同步的方法,用得还是比较多的,但在C#中跨进程编程就比较少了,更多的使用了其它一些机制,特别是WCF做为一种分布式编程的技术逐渐被推广后,也越来越方便了。

原来在线程间使用事件,大多使用这两个AutoResetEventManualResetEvent,但在跨进程中使用就不可以了。这时候就得祭出他们两个的父类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;    }}


1 0
原创粉丝点击