2015-12-02 2 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 Этот метод асинхронной не хватает «ждать» операторов и будет работать синхронно. Рассмотрите возможность использования оператора «ожидание» для ожидания неблокирующих вызовов API, или «ждать Task.Run (...)», чтобы выполнить работу с ЦП на фоне . ImageParser C: \ Users \ Johny \ Documents \ Visual Studio 2015 \ Projects \ ImageParser \ ImdbSample \ ItemView.xaml.cs 26 41Куда поместить ожидание этой функции?

+6

Выполняете ли вы какую-либо асинхронную работу в этом методе? Приведение модификатора 'async' к методу не делает ничего волшебным образом параллельно. Если это ваш ход мыслей, то нигде. –

+0

Я разобрал изображения с devianart.com в своем приложении для Windows Phone. Я загружаю изображения в фоновом режиме –

+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; 
Смежные вопросы