我的代码调用Web service方法,这需要几分钟的时间来执行该操作。 在此期间,我的窗口变得无法响应,并显示一个完整的白色屏幕。未响应窗口
我不希望从不同的线程调用方法。
这是处理它的最好方法吗?
环境:C#,Web服务
我的代码调用Web service方法,这需要几分钟的时间来执行该操作。 在此期间,我的窗口变得无法响应,并显示一个完整的白色屏幕。未响应窗口
我不希望从不同的线程调用方法。
这是处理它的最好方法吗?
环境:C#,Web服务
您可以在单独的线程上发出请求,这将使UI线程响应。完成后,您需要将响应同步回UI界面。
的BackgroundWorker是你的朋友。
这里是我如何使用一个BackgroundWorker有一个WebService的example。基本上,没有办法在没有使用单独线程的情况下在UI端进行密集操作。 BackgroundWorker是在单独的线程上运行的最好方式。
要有一个响应式用户界面,您必须使用另一个线程。
但是,如果你使用visual studio,生成的客户端类具有异步方法签名,这将为你做。如果你的方法是 “GetData”,那么你应该有一个名为“GetDataAsync”的方法,它不会冻结你的窗口。
下面是一个例子:
WsClient client;
protected override void Load() {
base.Onload();
client = new WsClient();
client.GetDataCompleted += new GetDataCompletedEventHandler(client_GetDataCompleted);
}
//here is the call
protected void Invoke()
{
client.GetDataAsync(txtSearch.Text);
}
//here is the result
void client_GetDataCompleted(object sender, GetDataCompletedEventArgs e)
{
//display the result
txtResult.Text = e.Result;
}
我已经使用不同的线程,但它仍然是不响应之间切换这通常发生。 – Buzz 2009-10-29 11:42:45
然后,你可以发布一些代码来帮助我们理解这个问题吗? – 2009-10-29 12:01:06
我已经使用不同的线程,但它仍然是不响应 – Buzz 2009-10-29 11:43:36
当i应用程序 – Buzz 2009-10-29 11:45:38