关于委托传值的总结,每天总结一点点,每天进步一点点
这里尝试了串口通讯委托,虽然本来就有,但是自己练习一下还是好的。
//定义一个委托
public delegate void serialPortHandler(string msg);
//定义一个委托事件
public event serialPortHandler GetData;
private void serialPortListen()
{
while (true)
{
Thread.Sleep(10);
string msg = serialPort.ReadExisting();
if (msg!= string.Empty)
{
GetData(msg);
serialPort.DiscardOutBuffer();
}
if (!isEnable) break;
}
}
使用
serialPortHelper = new Communication.serialPortHelper("COM1");
//注册事件
serialPortHelper.GetData += SerialPortHelper_GetData;
private void SerialPortHelper_GetData(string msg)
{
string info = string.Format("[{0}]Recevied:{1}", DateTime.Now.ToString("HH:mm:ss:fff"), msg);
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(() =>
{
updateUI(info);
}));
}
else
{
listBox1.Items.Add(info);
}
}
void updateUI(string msg)
{
listBox1.Items.Add(msg);
}
总的来说,需要在类A里面定义一个委托和事件,
在类B里面通过+=事件,接受消息。
涉及到跨线程更新UI的时候,需要使用委托去更新。