我需要通过事件传递数据.目前,当接收到更多数据(通过comport)时,事件将触发但前一事件(&data)尚未处理,因此数据将被覆盖.
如何以安全的方式处理事件和数据?我有多个这样的事件(15x),所以我不确定使用数据队列是最好的方法还是将数据与事件一起传递(如SO项目4215845).
示例(此示例使用字符串,但我也使用数组,bools等):
在'发件人'侧(class1):
public event EventHandler evDiaStringMessage = delegate { };
private void evDiaStringMessageEvent()
{
evDiaStringMessage(this, new EventArgs());
}
private static string _DiaString;
public string DiaString
{
get { return _DiaString; }
set { _DiaString = value; }
}
Run Code Online (Sandbox Code Playgroud)
DiaString包含数据,并在evDiaStringMessage过早触发时被覆盖.
在'接收器/ GUI'侧(class2):
dia.evDiaStringMessage += new EventHandler(dia_evDiaStringMessage);
private delegate void dia_evDiaStringMessageCallBack(object sender, EventArgs e);
void dia_evDiaStringMessage(object sender, EventArgs e)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new dia_evDiaStringMessageCallBack(dia_evDiaStringMessage), new object[] { sender, e});
}
else
{
frmcomm.CommTextBox("Receiver message: " + dia.DiaString + "\r\n", …Run Code Online (Sandbox Code Playgroud)