予想通りに動作しないコードパスがあります。おそらくバグがあるかもしれませんが、誤解している作業を待っている可能性が高いと思われます。次のコードの目的は、2番目の画面に移動し、その後、タイムアウトに基づいて、再び移動し、いくつかのコンテンツを共有しようとすることです:期待通りに動作しないタスクを待つ
public void DisplayAdvert(BaseViewModel sourceVM, Task afterAdvert)
{
_afterShow = afterAdvert;
_tmr = new DispatcherTimer();
_tmr.Tick += _tmr_Tick;
_tmr.Interval = new TimeSpan(0, 0, 2);
_tmr.Start();
Navigation.Navigate<AdvertViewModel>();
}
:
AdvertHelper adHelper = new AdvertHelper();
Task nav = new Task(async() =>
{
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() =>
{
System.Diagnostics.Debug.WriteLine("Call Navigate to MainPageViewModel");
Navigation.Navigate<MainPageViewModel>();
saved = await SaveVideo();
System.Diagnostics.Debug.WriteLine("After SaveVideo()");
});
});
adHelper.DisplayAdvert(this, nav);
System.Diagnostics.Debug.WriteLine($"Before await nav (saved: {saved})");
await nav;
System.Diagnostics.Debug.WriteLine($"After await nav (saved: {saved})");
DisplayAdvert
は次のようになりますタイムアウト:
private void _tmr_Tick(object sender, object e)
{
_afterShow.Start();
_tmr.Stop();
}
だから、私の理解では、私はその後、目的のOのために(動画を保存しようとすると、MainPageViewModel
にナビゲートしますタスクを作成していることですこれは、数秒後にSaveVideo()が単に非同期関数でtrueを返すと仮定します。デバッグから
:だから
Before await nav (saved: False)
Call Navigate to MainPageViewModel
SaveVideo() Called
After await nav (saved: False)
SaveVideo() Return true
After SaveVideo()
、私はこれを正しく読んでいる場合、コードはタスクnav
(したがってSaveVide())を待っているのではなく、継続的なので、結果を取得していません正しい時刻にSaveVideo()を呼び出します。
3つのコードがあります。それらの少なくとも1つは、奇妙な根本にあります。意味、あなたがこれを少し単純化できるかどうかを見てください。 –