C#实现某一属性值变化时触发事件
在我们做工业软件中,经常会遇到要实时监控某一点,在这个点变化时去做一些事情
放入程序里呢,就是要实时监控某一属性的值,当值发生变化时触发事件,其核心就是借助属性的Set方法,来判断当前set的值是否与原来的值相等,如果相等直接赋值不予理会,如果不相等,说明值变了,根据自己调用的方法,声明委托,事件,触发方法
核心代码:
public delegate void tempChange(object sender,EventArgs e); public event tempChange onTempChange; private bool _temp= false; public bool Temp { get { return _temp; } set { if (_temp!=value) { onTempChange(new object(), new EventArgs()); } _temp= value;
}
}
下边我们做一个Demo ,来测试一下
我们新建一个from,上边添加一个lable,添加一个button 我们通过button来改变这个temp属性的值 ,使之触发对应的事件
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication3 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } int i = 0; private void Form1_Load(object sender, EventArgs e) { changeEvent += Form1_changeEvent; } void Form1_changeEvent(string value) { this.richTextBox1.Invoke(new Action(() => { this.richTextBox1.AppendText("当前lable的值为" + value+"\r\n"); })); } private void button1_Click(object sender, EventArgs e) { Temp = i + ""; label1.Text = Temp; i++; } public delegate void ChangeDelegate(string value); public event ChangeDelegate changeEvent; public string _temp; public string Temp { get { return _temp; } set { if (_temp != value) { changeEvent(value); } _temp = value; } } } }
测试:
可以看到 我们每点击一次按钮 都改变了temp的值,从而触发了changeEvent事件 ——给richTextBox添加文本