MegaApiClient error de progress

Iniciado por rigorvzla, 22 Julio 2018, 15:29 PM

0 Miembros y 1 Visitante están viendo este tema.

rigorvzla

hola a todos, espero puedan ayudarme en este problema.

estoy usando la api MegaApiCLient
y aunque todo va casi bien en este codigo , no veo lo que hago mal
   static void descargaMegaFile()
        {           
                var client = new MegaApiClient();
                client.LoginAnonymous();

                Uri fileLink = new Uri("https://mega.nz/#!4YlxhLpD!i0RpF63RTLkjvHvHoeqf3xm8yXQv0zDzp954XtouMUE");
                INodeInfo node = client.GetNodeFromLink(fileLink);

                Console.WriteLine($"Downloading {node.Name}");
                Progress<double> ze = new Progress<double>(p => Console.WriteLine($"Progress updated: {p:P0}"));
                client.DownloadFileAsync(fileLink, node.Name, ze);

                client.Logout();
            Console.ReadKey();
        }


en teoria esta bien pero al iniciar la descarga da un error.

en cambio este esta perfecto mas no puedo capturar el progress de la descarga

   static void descargaMegaFile()
        {           
                var client = new MegaApiClient();
                client.LoginAnonymous();

                Uri fileLink = new Uri("https://mega.nz/#!4YlxhLpD!i0RpF63RTLkjvHvHoeqf3xm8yXQv0zDzp954XtouMUE");
                INodeInfo node = client.GetNodeFromLink(fileLink);

                Console.WriteLine($"Downloading {node.Name}");
               
                client.DownloadFile(fileLink, node.Name);

                client.Logout();
            Console.ReadKey();
        }


si alguien tiene conocimiento espero pueda ayudarme

Eleкtro

#1
Nunca he utilizado esa librería, ni la pienso utilizar para comprobar nada, pero solamente con apreciar la nomenclatura de los miembros que has compartido en esos dos snippets te puedo decir que el primero en teoría es asincronico, y el segundo es sincrónico, esto es la respuesta a por qué en el segundo código (el sincrónico) no puedes capturar el porcentaje de la descarga puesto que el método client.DownloadFile() lo más probable es que sea una llamada bloqueante; esto también podría explicar lo que te sucede en el primer código (el asincrónico), puesto que al parecer cuando llamas al método client.Logout() te estás desconectando antes de finalizar la descarga ya que el método client.DownloadFileAsync() en teoría es asincrónico...

Pero la verdad es que sin que des ninguna información sobre dicho error entonces nadie va a saber que decirte con respecto el problema del código asincrónico, no somos adivinos...

De todas formas mi sugerencia es que te documentes sobre la utilización de los keywords async y await al aplicar programación asincrónica, prueba a ver si te funciona así:

Código (csharp,1,10) [Seleccionar]
static async void descargaMegaFile() {          
   var client = new MegaApiClient();
   client.LoginAnonymous();

   Uri fileLink = new Uri("https://mega.nz/#!4YlxhLpD!i0RpF63RTLkjvHvHoeqf3xm8yXQv0zDzp954XtouMUE");
   INodeInfo node = client.GetNodeFromLink(fileLink);

   Console.WriteLine($"Downloading {node.Name}");
   Progress<double> ze = new Progress<double>(p => Console.WriteLine($"Progress updated: {p:P0}"));
   var result = await client.DownloadFileAsync(fileLink, node.Name, ze);

   client.Logout();
   Console.ReadKey();
}


Saludos.








rigorvzla

en efecto, para no saber , acertaste perfectamente muuchas gracias.
de ahi parti y lo solucione, gracias nuevamente