开发者

Not responding window

My code calls a Web service method which takes a few minutes to perform the operation. During that time my window becomes non responsive and it shows a complete white screen.

I don't want to the call method from a different thread.

It it the best way to handl开发者_开发问答e it?

Environment: C#, web service


The BackgroundWorker is your friend.

Here's an example of how I use a BackgroundWorker with a WebService. Basically, there's no way to do intensive operations on the UI side without using a separate thread. The BackgroundWorker is the nicest way of running on a separate thread.


To have a responsive UI, you must use another thread.

But if you use visual studio, the generated client class have asynchronous method signatures wich would do it for you. If your method is "GetData", then you should have a method called "GetDataAsync" wich would not freeze your window.

Here is an example :

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;
}


You can make the request on a separate thread, which will leave the UI thread responsive. You'll need to synchronise the response back to the UI thread once you've finished.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜