我是一名技术级别的员工,帮助在制造测试环境中进行一些编码。具体问题是在 C# 中处理事件。不仅仅是 Button_click,特别是如果我有来自串行端口的数据流并且必须根据通过串行端口传入的内容实时更新 UI。例如,如果我有两种最终都做同样事情的方法,那么它们之间有什么区别:
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) {
input = (sender as SerialPort).ReadLine();
if (input.Contains("look for this"))
this.Invoke(new EventHandler(doSomething));
}
和类似的东西:
void OnGotData(object sender, EventArgs e) {...};
delegate void UpdateCallback(data d);
void doSomething(data d) {
...
if (field.InvokeRequired) {
UpdateCallback x = doSomething;
this.Invoke(x, new object[] { d });
}
else {
field.Text = d;
}
...
}
有哪些权衡?更复杂的第二种方法是惯例问题吗?当实时性能很重要时,我可以在任何地方使用第一种方法吗?