Estoy desarrollando una aplicación C# Winforms, parte de la aplicación cargará archivos a un servidor web usando AsyncUpload (usándolo, debido a la necesidad de utilizar una devolución de llamada), en programa en C#C#: Bloqueo de una llamada de función hasta que se cumpla la condición
i consiguió un simple bucle for que llama a la función Carga
for(int i=0;i < 10 ; i++)
{
Uploadfun();
}
Y la diversión hace un poco de magia:
Uploadfun()
{
// Logic comes here
// webClient.UploadFileAsync runs a 2nd thread to perform upload ..
webClient.UploadFileAsync(uri, "PUT", fileNameOnHD);
}
Y una devolución de llamada que es llamada w uando la carga asíncrona se realiza
Upload_Completed_callback()
{
//Callback event
}
Editar
La secuencia lógica:
- diversión es llamada (de bucle)
- lógica de la diversión se ejecuta y realiza ..
- Vuelve al ciclo
- La devolución de llamada se llamará eventuall y, cuando UploadFileAsync (que ejecuta una lógica en otro hilo) terminará
El problema está en la tercera punto, cuando la ejecución se mueve hacia atrás para el bucle, i necesidad de bloquear el bucle de continuar hasta que el se llama a la devolución de llamada.
¿Tiene acceso a la implementación 'divertida'? Probablemente deberías considerar proporcionar una interfaz síncrona en la que se implemente la API asincrónica. –
En la forma en que lo está describiendo, su código parece ser secuencial y de un solo subproceso, lo que significa que hasta que se llame a la función 'devolución de llamada', el ciclo no continuará. Por favor corrígeme si me equivoco al dar una explicación más detallada. –
@Madi: Entonces estás haciendo esto al revés. Debería usar la versión síncrona de 'UploadFile' en el núcleo de la lógica y usar una API asincrónica encima si lo necesita. –