9

अद्यतननेविगेशन के दौरान RaiseCanExecuteChanged COM अपवाद?

अपलोड की गई नमूना परियोजना: https://github.com/subt13/BugSamples

मैं एक त्रुटि है कि एक Windows 10 UAP अनुप्रयोग है कि MVVMLight ढांचे का इस्तेमाल करता है में होने वाली कर दिया गया reproduced है।

मैं नेविगेशन के दौरान नीचे त्रुटि प्राप्त सीपीयू भारी बोझ (~ 20-25%) के अधीन होने के और पेज "भारी" (बड़ी छवियों, नियंत्रण के बहुत सारे, आदि, आदि)

है

सिस्टम पर। रनटाइम.इंटरोप सर्विसेज। WindowsRuntime.ICommandAdapterHelpers। <> c__DisplayClass2.b__3 (वस्तु प्रेषक, EventArgs ई) System.EventHandler.Invoke पर (वस्तु प्रेषक, EventArgs ई) RaiseExecuteChangeRepo.ViewModel.MainViewModel.d__17 पर GalaSoft.MvvmLight.Command.RelayCommand.RaiseCanExecuteChanged() पर। 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> 

पुन: पेश करने के लिए बस तेजी से कुछ सेकंड के लिए अन्य एक पृष्ठ से टॉगल और फिर बस प्रतीक्षा करें। बहुत लंबे समय के बाद अपवाद उठाया जाएगा।

+0

E_FAIL WinRT में त्रुटि रिपोर्टिंग की गुणवत्ता के लिए केवल एक शिक्षक का ग्रेड है। अंतर्निहित समस्या का निदान करने के लिए यह पूरी तरह बेकार है। यह * थ्रेडिंग समस्या हो सकती है, हमेशा async/प्रतीक्षा कोड में इसके लिए गैर-शून्य बाधाएं। लेकिन फिर फिर यह कुछ भी हो सकता है। आपको एक विश्वसनीय रेपो परिदृश्य मिलना होगा, अगले सप्ताह के लिए कुछ भी करने की योजना नहीं है। –

+0

@ हंसपैसेंट - यूप, उस पर काम कर रहा है। –

+1

मेरा अनुमान है कि यह "कुछ पेजों के लिए एक पृष्ठ से दूसरी तरफ टॉगल करने के कारण होता है और फिर बस प्रतीक्षा करें।" - आपके 'async' ऑपरेशन अभी भी चल रहे हैं, और जब वे पूरा करते हैं तो वे एक एक्सएएमएल पेड़ से बातचीत करने का प्रयास करते हैं जो अब सक्रिय नहीं है। ठीक करने के लिए, सुनिश्चित करें कि आप ईवेंट को बढ़ाने से पहले अभी भी सक्रिय पृष्ठ हैं। –

उत्तर

1

मैंने निम्नलिखित घटना को कोड के पीछे जोड़कर मेरी समस्या को ठीक कर दिया।

protected override void OnNavigatedFrom(NavigationEventArgs e) 
{ 
    this.DataContext = null; 
    base.OnNavigatedFrom(e); 
} 
संबंधित मुद्दे