当前位置导航:炫浪网>>网络学院>>网页制作>>ASP.NET教程

实现异步调用Web Service,防止页面超时

  普通调用Web Service的方法,在Web Service执行期间客户端会一直等待服务执行完毕才能响应。从而造成客户端UI线程的阻塞假死现象。这时候,异步调用就显得很有用,它可以让客户端在调用Web Service时,不至于阻塞客户端的UI线程导致假死,还可以在调用Web Service的同时做些其他的处理。异步调用Web Service也有几种不同的方法,这里介绍常用的两种。

  002

  003     第一种方法,是通过利用Backgroundworker对象实现。 BackgroundWorker 类允许你在单独的专用线程上运行操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面(UI)似乎处于停止响应状态。如果你需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方便地解决问题。

  004

  005private void button1_Click(object sender, EventArgs e)

  006

  007{

  008

  009    BackgroundWorker backgroundworker = new BackgroundWorker();

  010

  011    //注册具体异步处理的方法

  012

  013    backgroundworker.DoWork += new DoWorkEventHandler(back_DoWork);

  014

  015    //注册调用完成后的回调方法

  016

  017    backgroundworker.RunWorkerCompleted +=

  018

  019        new RunWorkerCompletedEventHandler(back_RunWorkerCompleted);

  020

  021    //这里开始异步调用

  022

  023    backgroundworker.RunWorkerAsync();

  024

  025    //调用服务的同时客户端处理并不停止

  026

  027    ChangeProcessBar();

  028

  029}

  030

  031//完成事件

  032

  033void back_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)

  034

  035{

  036

  037    if (e.Error != null)

  038

  039        throw e.Error;

  040

  041    progressBar1.Value = progressBar1.Maximum; //调用完成了,把客户端进度条填充满

  042

  043    string price = e.Result.ToString();   //获取处理结果

  044

  045    MessageBox.Show("调用完成。价格是:" + price); //显示从服务器获取的结果值

  046

  047}

  048

  049//调用方法

  050

  051void back_DoWork(object sender, DoWorkEventArgs e)

  052

  053{

  054

  055    //Web Service代理类

  056

  057    ProductService.LTPService service = new ProductService.LTPService();

  058

  059    //调用Web方法GetClass1,将结果赋值给DoWorkEventArgs的Result对象

  060

  061    e.Result = service.GetProductPrice("001");

  062

  063}

  064

相关内容
赞助商链接