如何使用C#的事件来监控变量的改变?这是一个非常常见的问题。并且如果能够使用事件来解决的话对于编程会带来很大的便利同时保持性能的优良。
以下是完整的代码
public class Program
{
//需要监控的字段
private int myValue;
//属性设置,此处调用了事件触发函数
public int MyValue
{
get { return myValue; }
set
{
//如果变量改变则调用事件触发函数
if (value!=myValue)
{
WhenMyValueChange();
}
myValue = value;
}
}
//定义的委托
public delegate void MyValueChanged(object sender, EventArgs e);
//与委托相关联的事件
public event MyValueChanged OnMyValueChanged;
//构造函数初始化初值并绑定一个事件处理函数
public Program()
{
myValue = 0;
OnMyValueChanged += new MyValueChanged(afterMyValueChanged);
}
//事件处理函数,在这里添加变量改变之后的操作
private void afterMyValueChanged(object sender, EventArgs e)
{
//do something
}
//事件触发函数
private void WhenMyValueChange()
{
if (OnMyValueChanged != null)
{
OnMyValueChanged(this, null);
}
}
}
可以将要监控的变量写成一个类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WindowsFormsApplication7
{
class MyClass
{
private int myValue;
public int MyValue
{
get { return myValue; }
set
{
if (value !=myValue )
{
WhenMyValueChange();
}
myValue = value;
}
}
//定义的委托
public delegate void MyValueChanged(object sender, EventArgs e);
//与委托相关联的事件
public event MyValueChanged OnMyValueChanged;
//事件触发函数
private void WhenMyValueChange()
{
if(OnMyValueChanged !=null )
{
OnMyValueChanged(this, null);
}
}
}
}
该类应用的代码
namespace WindowsFormsApplication7
{
public partial class Form1 : Form
{
MyClass myclase;
public Form1()
{
InitializeComponent();
myclase = new MyClass();
myclase.MyValue = 23;
myclase.OnMyValueChanged += myclase_OnMyValueChanged;
myclase.MyValue = 24;
}
void myclase_OnMyValueChanged(object sender, EventArgs e)
{
MessageBox.Show("gaibian");
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}