没有回应窗口

时间:2009-10-29 10:59:28

标签: c# web-services desktop interaction

我的代码调用Web service方法,该方法需要几分钟才能执行操作。 在此期间,我的窗口变得无响应,并显示完整的白色屏幕。

我不希望来自不同线程的调用方法。

这是处理它的最好方法吗?

环境:C#,网络服务

3 个答案:

答案 0 :(得分:2)

BackgroundWorker是你的朋友。

这是我如何将BackgroundWorker与WebService一起使用的example。基本上,如果不使用单独的线程,就无法在UI端进行密集操作。 BackgroundWorker是在单独的线程上运行的最好方式。

答案 1 :(得分:1)

要拥有自适应用户界面,您必须使用其他线程。

但是如果你使用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;
}

答案 2 :(得分:0)

您可以在单独的线程上发出请求,这将使UI线程保持响应。完成后,您需要将响应同步回UI线程。