Não responder janela
-
10-07-2019 - |
Pergunta
Meu código chama um href="http://en.wikipedia.org/wiki/Web_service" rel="nofollow noreferrer"> serviço Web método
Eu não quero o método de chamada de um segmento diferente. É que a melhor maneira de lidar com isso? Ambiente: C #, serviço web
Solução
Você pode fazer o pedido em um segmento separado, que vai deixar o segmento interface do usuário responsivo. Você precisa sincronizar a volta resposta ao segmento interface do usuário, uma vez que você terminou.
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;
}