我有以下几种串行通信方法:
private void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int rxLength = this._serialPort.BytesToRead;
byte[] rxBuf = new byte[rxLength];
try
{
rxLength = this._serialPort.Read(rxBuf, 0, rxLength);
this.BeginInvoke((Delegate) (() =>
{
this._dataRx.AddBytes(rxBuf, 0, rxLength);
this.AddDataToAscii(rxBuf, rxLength, true);
}));
}
catch (Exception ex)
{
}
}
...和
private void _serialPort_ErrorReceived(object sender, SerialErrorReceivedEventArgs e)
{
this.BeginInvoke((Delegate) (() => { AddDataToAscii("\nSerial Error : " + e.EventType.ToString() + "\n", true); }));
}
这两个方法均返回以下错误: 严重性代码说明项目文件行抑制状态 错误CS1660无法将lambda表达式转换为类型“ Delegate”,因为它不是委托类型
如何修改源以定义缺少的委托人类型?
谢谢。
答案 0 :(得分:1)
Action是.NET框架提供的一种委托类型。该操作指向没有参数的方法,并且不返回任何值。
要使用您的代码,请使用Action
替换代码:
private void _serialPort_ErrorReceived(object sender, SerialErrorReceivedEventArgs e)
{
this.BeginInvoke((Action) (() => {
AddDataToAscii("\nSerial Error : " + e.EventType.ToString() + "\n", true); }));
}