Outras dicas

O BackgroundWorker é seu amigo.

Aqui está um exemplo de como eu uso um BackgroundWorker com um WebService. Basicamente, não há nenhuma maneira de fazer operações intensivas no lado da interface do usuário sem usar um segmento separado. O BackgroundWorker é a melhor maneira de executar em um segmento separado.

Para ter uma interface de usuário sensível, você deve usar outro segmento.

Mas se você usar estúdio visual, a classe do cliente gerada tem assinaturas de métodos assíncronos wich iria fazer isso por você. Se o seu método é "GetData", então você deve ter um método chamado "GetDataAsync" wich não iria congelar sua janela.

Aqui está um exemplo:

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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top