GüncellemeNavigasyon sırasında RaiseCanExecuteChanged COM Özel Durum mu var?
Uploaded örnek projesi: Ben MVVMLight çerçevesini kullanan Windows 10 UAP uygulamasında ortaya çıkan edilmiş bir hata yeniden var https://github.com/subt13/BugSamples
. İşlemci ağır yük (~% 20-25) altında ve sayfa "ağır" (vs. büyük resimler kontrollerin sürü vb)
ikenBen Navigasyon sırasında aşağıdaki hatayı alıyorsunuz
, System.Runtime.InteropServices.WindowsRuntime.ICommandAdapterHelpers. <> c__DisplayClass2.b__3 (Object sender, EventArgs e) System.EventHandler.Invoke (nesne gönderici, EventArgs e) RaiseExecuteChangeRepo.ViewModel.MainViewModel.d__17 de GalaSoft.MvvmLight.Command.RelayCommand.RaiseCanExecuteChanged() at. MoveNext() örneğinde
, hata yüklemek için denir oluyor ExecuteLoadDataCommandAsync()
ilişkili komuta dışında navigasyon esnasında oluyor özel 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;
}
hiçbir şey üzerinde oluşur veri.
<Core:EventTriggerBehavior EventName="Loaded">
<Core:InvokeCommandAction Command="{Binding LoadDataCommand}">
</Core:InvokeCommandAction>
</Core:EventTriggerBehavior>
basitçe hızla birkaç saniye boyunca diğer bir sayfadan diğerine geçiş ve sonra sadece bekleyin, yeniden oluşturmak için. Çok uzun bir süre sonra istisna kaldırılacaktır.
E_FAIL, WinRT'deki hata bildiriminin kalitesiyle ilgili yalnızca bir öğretmenin notudur. Altta yatan sorunu teşhis etmek tamamen işe yaramaz. Async/await kodunda bir * threading problemi, her zaman sıfır olmayan oranlar olabilir. Ama sonra tekrar bir şey olabilir. Güvenilir bir repro senaryosu bulmanız gerekecek, gelecek hafta için hiçbir şey başarmayı planlamayın. –
@HansPassant - Yup, bunun üzerinde çalışıyor. –
Tahminimce "bir sayfadan diğerine hızlıca birkaç saniye geçiş yap ve sonra bekle." - "async" işlemleriniz hala çalışıyor ve tamamlandığında, artık aktif olmayan bir XAML ağacıyla etkileşimde bulunmaya çalışıyorlar. Düzeltmek için, etkinlikleri yükseltmeden önce hâlâ etkin sayfa olduğundan emin olun. –