WEB开发网
开发学院软件开发VC 为Windows应用创建简单的异步调用模式 阅读

为Windows应用创建简单的异步调用模式

 2007-09-01 21:35:00 来源:WEB开发网   
核心提示: public void CustomerDataCallback( IAsyncResult ar ){// Retrieve the customer data._customerData = _proxy.EndGetCustomerData( ar );}现在,你必须注意,为Wind

public void CustomerDataCallback( IAsyncResult ar )
{
   // Retrieve the customer data.
   _customerData = _proxy.EndGetCustomerData( ar );
}

现在,你必须注意,这一方法是被后台工作线程调用的。如果想在前台界面上使用刚刚获得的信息(例如在一个data grid控件中显示那些客户数据),一定不要忘记在用户界面线程中进行更新。如果忘了这样做,就会发生很多莫名其妙的错误,而且调试起来还相当的不易。

那么我们怎么切换线程呢?我们可以使用服务代理的方法,所有的控件都源自这些对象的实现。我们可以实现一个从用户界面线程调用的方法,在这个方法内我们可以安全的更新我们的界面。使用Control.Invoke方法,我们必须给用户更新方法传递一个委托,现在,CustomerDataCallback方法的代码更新如下:

public void CustomerDataCallback( IAsyncResult ar )
{
   // Retrieve the customer data.
   _customerData = _proxy.EndGetCustomerData( ar );
   // Create an EventHandler delegate.
   EventHandler updateUI = new EventHandler( UpdateUI );
   // Invoke the delegate on the UI thread.
   this.Invoke( updateUI, new object[] { null, null } );
}

UpdateUI方法可以按如下办法实现:

private void UpdateUI( object sender, EventArgs e )
{
   // Update the user interface.
   _dataGrid.DataSource = _customerData;
}

这并不是十分非常严谨科学,因此可以使这一“两次跳转”的复杂问题简单化起来。关键在于异步方法的原始调用(以WinForm类为例)用来负责转换线程,并且需要另一个委托以及Control.Invoke方法。

上一页  1 2 3 4 5  下一页

Tags:Windows 应用 创建

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接