В моей программе у меня есть таймер, который, когда он гаснет до 0, я хочу, чтобы мое приложение «подключилось» к службе, а пока оно «подключено», отобразите это кольцо прогресса.Отображение ProgressRing при подключении
Казалось бы, мое кольцо прогресса не активируется до конца функции, в которой он настроен на активное. Но поскольку я жду завершения функции Connect, кольцо прогресса никогда не появляется.
Я пробовал различные методы для решения этой проблемы, но мне не хватает понимания относительно ожиданий/задач/диспетчеризации, чтобы сделать эту работу.
Вот код, относящийся к ProgressRing и функции Connect:
vm.IsConnecting = true;
await Window.Current.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() => vm.Connect());
if (vm.ConnectionClear)
this.Frame.Navigate(typeof(MainPage), vm);
vm.IsConnecting = false;
vm.IsConnecting является то, что IsActive свойство ProgressRing привязан.
Как я могу заставить его отображать progressRing сразу после того, как vm.IsConnecting установлен в true?
Следует отметить, что я нацелен на WinRT, и поэтому мой набор инструментов несколько ограничен.
Странная вещь в этом заключается в том, что у меня есть тот же самый блок кода, что и выше, в EventHandler для нажатия кнопки, и он работает так, как я полагаю. То есть, когда кнопка нажата, отображается ProgressRing, и программа будет выполнять метод подключения, и когда она будет завершена, ProgressRing исчезнет.
private async void Connect_Clicked(object sender, RoutedEventArgs e)
{
vm.IsConnecting = true;
await Window.Current.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() => vm.Connect());
if (vm.ConnectionClear)
this.Frame.Navigate(typeof(MainPage), vm);
vm.IsConnecting = false;
}
У вас есть взгляд на BackgroundWorker? Я считаю, что он специально разработан, чтобы позволить фоновым процессам работать с потоком пользовательского интерфейса и сообщать о своем прогрессе, используя свои собственные методы. Не думаю, что это точно ответит, поэтому я не написал это как ответ, но, может быть, хорошая ссылка позже? Посмотрите: http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker(v=vs.110).aspx – Wade
Я отчаянно хотел использовать BackgroundWorkers, так как я использовал их ранее и имею более сильное знание того, как они функционируют. При этом они не включены в набор инструментов WinRT. – khrave