Информация за напредъка с помощта на HttpClient

Исках да внедря лента за напредъка с помощта на „Windows.Web.Http.HttpClient“ в Windows Phone 8.1 Silverlight.

Редактиране: Първи опит:

private async Task CheckProgress()
{
    var df = httpClient.GetAsync(new Uri(uriString, UriKind.Absolute)).Progress = Progress;

    // here i want to stop the execution till whole content downloaded

    // Reason to wait here
    // this client download will be used by one more async method. so i need to wait here till the file completely downloaded.

    // this whole is done in this method only ( requirement)
} 

private void  Progress(IAsyncOperationWithProgress<HttpResponseMessage, HttpProgress> asyncInfo, HttpProgress progressInfo)
{
   // here i getting the progress value.
   // i have already set a call back method that report the progress on the UI.
}

Още един опит: Но получаване на изключението Invocation of delegate at wrong time.

private async Task CheckProgress()
{
    var df = httpClient.GetAsync(new Uri(uriString, UriKind.Absolute))

    df.Progress =  Progress;

    await df;
    // here i want to stop the execution till whole content downloaded
} 

Въпрос:

Всичко, което исках, е да спра метода CheckProgress(), за да продължа да чакам, докато завърши цялото изтегляне.


person loop    schedule 18.07.2014    source източник
comment
Може би можете да погледнете ManualResetEvent (msdn.microsoft.com/en-us/library/)   -  person Sauleil    schedule 18.07.2014
comment
Кога и как извиквате CheckProgress()?   -  person Igor Ralic    schedule 18.07.2014
comment
хаха, аз също... обърках се. Имате ли пълния код?   -  person gumuruh    schedule 25.03.2020


Отговори (1)


Получих решението на моя проблем, но това е само малък пропуск в моето Second Attempt.

private async Task CheckProgress()
{
    var df = httpClient.GetAsync(new Uri(uriString, UriKind.Absolute))

    df.Progress = (res, progress) =>
    { 
       // no separate event handler.
    }

    await df;   
} 

Просто работи добре. Надявам се, че ще помогне на някой наздраве :)

person loop    schedule 19.07.2014
comment
какво ще кажете за байтовете, съхранявани, тъй като се използват в http://zetcode.com/csharp/httpclient/? Имам предвид, че вашият код изглежда малко по-различно. веднъж извиквайки httpClient.GetAsync(); метод - person gumuruh; 25.03.2020