我在做智能客户端的时候,当用到WebService时,由于服务器处理速度、网络传输速度等各种原因会使一个WebService从请求开始到获得响应结果之间等待一段时间,这时候线程会处于阻塞状态,程序会等待请求结果导致客户端无法进行其他的动作或处理。这时候就需要异步的使用WebService。
------解决方案--------------------
private void button_Click_(object sender, System.EventArgs e)
{
//为一个Webservice的代理类创建一个实例
asy.asynchronism someWS = new asy.asynchronism();
//创建一个异步回调对象,构造函数的参数为回调的方法,该回调的方法必须包含一个异步操作状态类型的参数
System.AsyncCallback cb= new AsyncCallback(showmsg);
//开始进行异步通信,通常定义一个IAsyncResult异步操作状态类型的变量来接收开始异步通信方法所返回的通信状态
//通过这个操作状态的实例就可以掌握当前通信状态。
//如:System.IAsyncResult ar = someWS.BeginHelloWorld(cb,someWS);
someWS.BeginHelloWorld(cb,someWS);
}
void showmsg(IAsyncResult ar) //必须要有一个IAsyncResult类型的参数
{
//定义一个代理类的类型的变量接收所在回调方法的参数的异步操作信息
asy.asynchronism someWS=(asy.asynchronism)ar.AsyncState;
//该代理类实例调用End</webmethod/>方法来获得WebService的结果
MessageBox.Show(someWS.EndHelloWorld(ar));
}
------解决方案--------------------
是否可以考虑用多线程来实现,调用webservice的时候,把调用放到另一个线程中去,这样对主线程没有影响