Mientras trabajaba con un par de WebServices integrando Devices con Microsoft CRM, recordé que para poder realizar llamadas asincrónicas a los mismos, ahora tengo otra opción más además de los métodos Begin y End que traen los Webservices.
Básicamente es trabajar con el control BackgroundWorker. El mismo es de muy simple utilización, simplemente lo agregamos a nuestro form y utilizamos los eventos DoWork() y RunWorkerCompleted().
Por ejemplo, supongamos que necesitamos invocar a un WebService pasando un parámetro desde el Clic de un botón y mostrar el resultado de esta llamada en un MessageBog. Luego de agregar un control BackgroundWorker y renombrarlo como bwHelloWorld, agregamos el siguiente código al evento clic del botón.
|
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.bwHelloWorld.RunWorkerAsync("bruno") End Sub |
Como pueden ver, invocamos al método RunWorkerAsync del BackgroundWorker y la pasamos como parámetro un string. Luego en el evento DoWork(), agregamos el siguiente código.
|
Private Sub bwHelloWorld_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwHelloWorld.DoWork Dim ws As New localhost1.Service1 Dim res As String = "" res = ws.HelloWorld(e.Argument) e.Result = res End Sub |
Este método invoca al WebService y procesa la ejecución del mismo. Finalmente, el evento RunWorkerCompleted() es el que se dispara cuando se termina el proceso en DoWork(). Dentro del mismo agregamos el siguiente código.
|
Private Sub bwHelloWorld_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwHelloWorld.RunWorkerCompleted MsgBox(e.Result) End Sub |
Realmente simple no ??
Saludos
Leave a comment