我猜想您是想问,采用了异步方法得到返回值以后,无法将其正确的显示在 Windows Form 上吧?
根据您的错误提示我可以判断这是因为您在异步方法中直接访问了 Windows Form 控件 dataGridView,由于异步方法在默认情况下利用线程池 (ThreadPool) 中的一个活动线程运行,此时如果在此方法中操作 UI 控件,则会造成跨进程访问对象的异常 (因为 UI 元素创建于 UI 线程,其他对象均无法访问它)。因此,必须要使用 this.Invoke 方法来进行基于 SynchronizationContext 的同步。例如:
public void OnReceivedData(IAsyncResult result)
{
// 结束异步方法并获得返回值。
object returnValue = someObject.EndSomeMethid(result);
// 显示。
this.Invoke(() => { this.dataGridView.DataSource = returnValue; });
}
Mark Zhou