Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: rigorvzla en 22 Julio 2018, 15:29 pm



Título: MegaApiClient error de progress
Publicado por: rigorvzla en 22 Julio 2018, 15:29 pm
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
Código:
   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

Código:
   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


Título: Re: MegaApiClient error de progress
Publicado por: Eleкtro en 29 Julio 2018, 12:36 pm
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
  1. static async void descargaMegaFile() {          
  2.    var client = new MegaApiClient();
  3.    client.LoginAnonymous();
  4.  
  5.    Uri fileLink = new Uri("https://mega.nz/#!4YlxhLpD!i0RpF63RTLkjvHvHoeqf3xm8yXQv0zDzp954XtouMUE");
  6.    INodeInfo node = client.GetNodeFromLink(fileLink);
  7.  
  8.    Console.WriteLine($"Downloading {node.Name}");
  9.    Progress<double> ze = new Progress<double>(p => Console.WriteLine($"Progress updated: {p:P0}"));
  10.    var result = await client.DownloadFileAsync(fileLink, node.Name, ze);
  11.  
  12.    client.Logout();
  13.    Console.ReadKey();
  14. }

Saludos.


Título: Re: MegaApiClient error de progress
Publicado por: rigorvzla en 29 Julio 2018, 15:16 pm
en efecto, para no saber , acertaste perfectamente muuchas gracias.
de ahi parti y lo solucione, gracias nuevamente