public override async Task ExecuteAsync(object parameter) { await m_semaphore.WaitAsync(); m_cancelCommand.NotifyCommandStarting(); Execution = new TaskCompletionNotifier <TResult>(action(parameter, m_cancelCommand.CancelToken)); Execution.Run(); TaskCompletionNotifier <TResult> me = Execution; RaiseCanExecuteChanged(); m_semaphore.Release(); await Execution.TaskCompletion; await m_semaphore.WaitAsync(); if (me == Execution) { m_cancelCommand.NotifyCommandCompleted(); RaiseCanExecuteChanged(); } m_semaphore.Release(); }
public object Convert(object value, Type targetType, object parameter, string language) { //var image = value as Image; //if (image == null || image.BaseUri == null) //{ // var bitmap = new BitmapImage(new Uri("ms-appx:///Assets/www/news_detail_header_def.jpg")); // var notifier = new TaskCompletionNotifier<BitmapImage>(); // notifier.SetTask(Task.FromResult(bitmap)); // return notifier; //} //else //{ // var task = Task.Run(async () => // { // var cache = ServiceLocator.Current.GetInstance<ImageCache>(); // var uri = await cache.GetImageSourceFromUrlAsync(image.BaseUri.ToString()); // return uri; // }); // var notifier = new TaskCompletionNotifier<BitmapImage>(); // notifier.SetTask(task, c => new BitmapImage(c)); // return notifier; //} if (value != null) { var task = Task.Run(async() => { var cache = ImageCache.CreateInstance(); var uri = await cache.GetImageSourceFromUrlAsync(value.ToString()); return(uri); }); var notifier = new TaskCompletionNotifier <BitmapImage>(); notifier.SetTask(task, c => new BitmapImage(c)); return(notifier); } else { return(string.Empty); } }