更新RaiseCanExecuteChanged導航期間的COM異常?
上傳樣本項目:https://github.com/subt13/BugSamples
我已複製已經在利用MVVMLight框架在Windows 10 UAP應用已經發生的錯誤。
我接收低於錯誤導航期間在CPU處於重負載(〜20-25%)下和在網頁是「重」(放大圖,大量的控制等,等)
at System.Runtime.InteropServices.WindowsRuntime.ICommandAdapterHelpers。 <> c__DisplayClass2.b__3(對象 發件人,EventArgs e)上System.EventHandler.Invoke(對象發件人, EventArgs e)上 GalaSoft.MvvmLight.Command.RelayCommand.RaiseCanExecuteChanged()在 RaiseExecuteChangeRepo.ViewModel.MainViewModel.d__17。的MoveNext()
在該樣品中,上RaiseCanExecuteChanged();
private async void ExecuteLoadDataCommandAsync()
{
// cause the app to slow done.
var data = await Task.Run(() => GetData());
if (data != null)
{
this.Data.Clear();
foreach (var item in data)
{
this.Data.Add(new AnotherVM(item));
}
}
// have the select job command rerun its condition
this.SelectCommand.RaiseCanExecuteChanged();
}
// slow down the page
public List<DataItem> GetData()
{
var myList = new List<DataItem>();
for (int i = 0; i < 100000; ++i)
{
myList.Add(new DataItem("Welcome to MVVM Light"));
}
return myList;
}
沒有什麼特別的錯誤發生比用ExecuteLoadDataCommandAsync()
相關聯的命令的其他導航期間正在發生獲取調用加載數據。
<Core:EventTriggerBehavior EventName="Loaded">
<Core:InvokeCommandAction Command="{Binding LoadDataCommand}">
</Core:InvokeCommandAction>
</Core:EventTriggerBehavior>
複製,簡單地從一個頁面切換到其它快速幾秒鐘,然後就等待。在不久之後,異常會被提出。
E_FAIL只是WinRT中錯誤報告質量的教師等級。診斷潛在的問題是完全沒有用的。它*可能是一個線程問題,在異步/等待代碼中它總是非零的可能性。但是,這又可能是任何事情。你必須找到一個可靠的repro場景,不要計劃在下週完成任何事情。 –
@HansPassant - 是的,正在努力。 –
我的猜測是,它是由「從一頁快速切換到另一頁幾秒鐘,然後等待」引起的。 - 你的'async'操作仍在運行,當它們完成時,它們嘗試與不再處於活動狀態的XAML樹進行交互。要解決這個問題,請確保您在舉辦活動之前仍然是活動頁面。 –