.NET中,许多IO设备的事件是在辅助线程上引发,如System.IO.Ports.SerialPort的DataRecieved事件。在MSDN中讲道:
从 SerialPort 对象接收数据时,将在辅助线程上引发 DataReceived 事件。 由于此事件在辅助线程而非主线程上引发,因此尝试修改主线程中的一些元素(如 UI 元素)时会引发线程异常。如果有必要修改主 Form 或 Control 中的元素,请使用 Invoke 回发更改请求,这将在正确的线程上执行。
在实际使用中,若需要同步调用,则使用Control.Invoke方法,异步调用使用Control.BeginInvoke方法(