我的串行数据已经进入我的应用程序,根据定义,它是异步的,所以当尝试更新标签以显示传入数据时,我遇到了麻烦。我时不时地在lblRx.AsyncUpdate
行上收到错误,告诉我该对象正在其他地方使用。
目前,我使用以下代码;
private void IODataReceived(object sender, IODataEventArgs e)
{
lblRx.AsyncUpdate(() => lblRx.Text = string.Format("{0}:\t{1}", e.Timestamp, e.Data));
SetBackColors(false, eIODirection.In);
}
public static void AsyncUpdate(this Control ctrl, ActionCallback action)
{
if (ctrl != null)
{
if (!ctrl.IsHandleCreated && ctrl.IsDisposed)
ctrl.CreateControl(); // MSDN says CreateControl() is preferred over CreateHandle().
if (!ctrl.IsDisposed)
AsyncInvoke(ctrl, action);
}
}
AsyncUpdate
方法不是问题(AFAIK ......在其他情况下效果很好)
我想我需要在调用AsyncUpdate
之前锁定控件。或者有更好的方法来处理这种情况吗?