2015-09-02 4 views
0

Я хочу использовать GetNetworkUsageAsync для получения и отправки байтов.
Когда мне это нравится, GetNetworkUsageAsyncHandler называется Но не сразу.
Я хочу использовать BytesSent и BytesReceived немедленно.
Что мне делать?GetNetworkUsageAsync() в Windows Phone 8.1 (C#)

private void MakeDataUsageChart() 
    { 
     //Make days of Month 
     GregorianDates = MakeMonthGregorianDate(YearGregorian, MonthGregorian); 

     localTime = new DateTime(2015, 9, 2, 0, 0, 0); 
     StartTime = new DateTimeOffset(localTime, TimeZoneInfo.Local.GetUtcOffset(localTime)); 
     localTime = new DateTime(2015, 9, 3, 0, 0, 0); 
     EndTime = new DateTimeOffset(localTime, TimeZoneInfo.Local.GetUtcOffset(localTime)); 
     InternetConnectionProfile.GetNetworkUsageAsync(StartTime, EndTime, DataUsageGranularity.Total, new NetworkUsageStates()).Completed = GetNetworkUsageAsyncHandler; 

     for (int count = 0 ; count <= GregorianDates.Count -1 ; count++) 
     { 
      ChartDatasGregorian.Add(new Data() 
      { 
       CategoryDownload = GregorianDates[count], 
       ValueDownload = BytesReceived, 
       CategoryUpload = GregorianDates[count], 
       ValueUpload = BytesSent, 
       CategoryTotal = GregorianDates[count], 
       ValueTotal = BytesReceived + BytesSent 
      }); 
     } 
     this.DataUsageLineSeries.DataContext = ChartDatasGregorian; 
    } 
    private void GetNetworkUsageAsyncHandler(IAsyncOperation<IReadOnlyList<NetworkUsage>> asyncInfo, AsyncStatus asyncStatus) 
    { 
     if (asyncStatus == AsyncStatus.Completed) 
     { 
      IReadOnlyList<NetworkUsage> networkUsages = asyncInfo.GetResults(); 

      foreach (NetworkUsage networkUsage in networkUsages) 
      { 
       string BytesSents = networkUsage.BytesSent.ToString(); 
       string BytesReceiveds = networkUsage.BytesReceived.ToString(); 
       BytesSent = Convert.ToInt64(BytesSents); 
       BytesReceived = Convert.ToInt64(BytesReceiveds); 

       //Column2DataPlan.Text = BytesSents + " " + BytesReceiveds; 
      } 

     } 
    } 

Прошу прощения за плохой английский.
Спасибо.

ответ

2

Что касается меня, то вместо того, чтобы вызвать ожидаемый метод и назначить событие Completed, лучше вызвать метод, используя оператор ожидания, и продолжить свою желаемую логику.

например:

await InternetConnectionProfile.GetNetworkUsageAsync(...); 
//The content of GetNetworkUsageAsyncHandler can be moved here. 

Я надеюсь, что это оказывается полезным.

+0

@Amin Более подробную информацию о [Асинхронное программирование с использованием асинхронных и ожидающих] (https://msdn.microsoft.com/en-us/library/hh191443.aspx) –

0

Ok. Я хочу сказать ответ на вопрос. Спасибо Mohammad Chamanpara много.
я просто изменил его немного:

IReadOnlyList<NetworkUsage> asyncInfo = await InternetConnectionProfile.GetNetworkUsageAsync(StartTime, EndTime, DataUsageGranularity.Total, new NetworkUsageStates()); 

     foreach (NetworkUsage networkUsage in asyncInfo) 
     { 
      string BytesSents = networkUsage.BytesSent.ToString(); 
      string BytesReceiveds = networkUsage.BytesReceived.ToString(); 
      BytesSent = Convert.ToInt64(BytesSents)/1024/1024; 
      BytesReceived = Convert.ToInt64(BytesReceiveds)/1024/1024; 
     } 

Я надеюсь, что эта помощь всем.
Спасибо.