C#多线程通信之委托(事件)
C#多线程通信之委托(事件)
在研究C# 线程之间通信时,发现传统的方法大概有三种
①全局变量,由于同一进程下的多个进程之间共享数据空间,所以使用全局变量是最简单的方法,但要记住使用volatile进行限制。
②线程之间发送消息(这个随后文章中会讨论到)。
③ CEvent为MFC中的一个对象,可以通过对CEvent的触发状态进行改变,从而实现线程间的通信和同步,这个主要是实现线程直接同步的一种方法。
本文介绍的一种方法是这三种之外的一种方法,本文中实例是通过创建一个线程类,通过委托事件把值传送到Form所在的类中,同时更新Form类中的一个控件(Label)中的值。
实现功能比较简单,目的是实现此功能,先把代码贴上:
MyThread.cs
- using System;
- using System.Threading;
- namespace ThreadsComm
- {
- public delegate void ReadParamEventHandler(string sParam);
- class MyThread
- {
- public Thread thread1;
- private static ReadParamEventHandler OnReadParamEvent;
- public MyThread()
- {
- thread1 = new Thread(new ThreadStart(MyRead));
- thread1.IsBackground = true;
- thread1.Start();
- }
- public event ReadParamEventHandler ReadParam
- {
- add { OnReadParamEvent += new ReadParamEventHandler(value);}
- remove{ OnReadParamEvent -= new ReadParamEventHandler(value);}
- }
- protected void MyRead()
- {
- int i = 0;
- while (true)
- {
- Thread.Sleep(1000);
- i = i + 1;
- OnReadParamEvent(i.ToString());//触发事件
- }
- }
- }
- }
- public event ReadParamEventHandler ReadParam
- {
- add { OnReadParamEvent += new ReadParamEventHandler(value);}
- remove{ OnReadParamEvent -= new ReadParamEventHandler(value);}
- }
这个需要说明一下:
add 上下文关键字用于定义一个自定义事件访问器,当客户端代码订阅您的事件时将调用该访问器。 如果提供自定义 add 访问器,还必须提供 remove 访问器。
remove 上下文关键字用于定义一个自定义事件访问器,当客户端代码取消订阅事件时将调用该访问器。 如果提供自定义 remove 访问器,还必须提供 add 访问器。
|
评论暂时关闭