2015-12-02 90 views
0
protected override async void OnNavigatedTo(NavigationEventArgs e) 
{ 
     base.OnNavigatedTo(e); 

     var content = (Content) Application.Current.Resources["NavigationParam"]; 

     titleName.Text = content.title; 
     var uri = new Uri(content.url, UriKind.Absolute); 
     imageShow.Source = new BitmapImage(uri); 
} 

嚴重性代碼說明項目文件行列警告CS1998這 異步方法缺乏「等待」運營商和將同步運行。 考慮使用'await'操作符來等待非阻塞API調用 或'await Task.Run(...)'在線程的背景 上執行CPU綁定的工作。 ImageParser C:\用戶\約翰尼拉\文檔\ Visual Studio的 2015年\項目\ ImageParser \ ImdbSample \ ItemView.xaml.cs 26 41這個功能在哪裏等待?

+6

你在做這方法中的任何異步工作嗎?將'async'修飾符放在一個方法上並不會讓任何東西神奇地並行運行。如果那是你的思路,那麼無處不在。 –

+0

我從devianart.com解析圖像到我的Windows手機應用程序。我在後臺下載圖片 –

+1

這與'async-await'無關。我建議你閱讀[「.NET中的並行編程」](https://msdn.microsoft.com/en-us/library/dd460693(v = vs.110).aspx),我想這就是你要的。 –

回答

2

您沒有任何等待異步操作(通過使用await運營商)裏面的方法的主體,因此方法定義中的async關鍵字不是必需的。只要刪除它,警告就會消失。

這不會改變你的方法的語義。正如警告消息明確指出的那樣,它已經同步運行。

1

BitmapImage異步自動下載圖像 - 不需要額外做任何事情。刪除async關鍵字,警告將消失。

如果您在做任何事情之前絕對必須等待圖像下載,下面是一些代碼,以向您展示如何。

// create a task source that we can await on later 
TaskCompletionSource<bool> taskSource = new TaskCompletionSource<bool>(); 

titleName.Text = content.title; 

// create an image 
var image = new System.Windows.Media.Imaging.BitmapImage(); 

// subscribe to the images download complete events - set results to true or false depending on if the download finish ok. 
image.DownloadCompleted += (sender, args) => taskSource.TrySetResult(true); 
       image.DownloadFailed += (sender, args) => taskSource.TrySetResult(false); 

// set the uri to start the download 
image.UriSource = new Uri(content.url, UriKind.Absolute); 

// await the task to extract the result  
bool wasDownloadSuccessful = await taskSource.Task;