Pregunta

Mi código llama a un método Servicio web que tarda unos minutos en realizar la operación. Durante ese tiempo, mi ventana deja de responder y muestra una pantalla en blanco completa.

No quiero llamar al método desde un hilo diferente.

¿Es la mejor manera de manejarlo?

Entorno: C #, servicio web

¿Fue útil?

Solución

Puede realizar la solicitud en un subproceso independiente, lo que dejará el subproceso de la interfaz de usuario sensible. Deberá sincronizar la respuesta con el hilo de la interfaz de usuario una vez que haya terminado.

Otros consejos

El BackgroundWorker es tu amigo.

Aquí hay un ejemplo de cómo uso un BackgroundWorker con un servicio web. Básicamente, no hay forma de realizar operaciones intensivas en el lado de la interfaz de usuario sin usar un hilo separado. BackgroundWorker es la mejor manera de ejecutarse en un hilo separado.

Para tener una IU receptiva, debe usar otro hilo.

Pero si usa Visual Studio, la clase de cliente generada tiene firmas de métodos asíncronos que lo harían por usted. Si tu método es " GetData " ;, entonces debe tener un método llamado " GetDataAsync " que no congelaría tu ventana.

Aquí hay un ejemplo:

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top