2013-02-11 28 views
6

के लिए marshalled किया गया था मैं C#/XAML का उपयोग कर विंडोज 8 एप्लिकेशन पर काम कर रहा हूं। इस घटना हैंडलर को छोड़कर सबकुछ काम कर रहा है जहां मुझे इस लाइन पर निम्न त्रुटि मिलती है।विंडोज 8 ऐप एप्लिकेशन को एक इंटरफ़ेस कहा जाता है जिसे एक अलग थ्रेड

await RefreshUserInfoAsync();

आवेदन एक अंतरफलक है कि एक अलग थ्रेड के लिए मार्शल किया गया था बुलाया। (HRESULT से अपवाद: 0x8001010E (RPC_E_WRONG_THREAD))

यह अवलोकन संग्रह ऐप क्लास में पुश अधिसूचना हैंडलर से अपडेट किया जा रहा है और यह ईवेंट हैंडलर मेरे दृश्य मॉडल में है। मैं एमवीवीएम लाइट जैसे किसी भी ढांचे का उपयोग नहीं कर रहा हूं। मैंने इस पर कुछ अन्य पोस्टों को देखा और अपना खुद का डिस्पैचर हेल्पर बनाने की कोशिश की लेकिन मुझे एक अलग त्रुटि मिली जहां विंडो। वर्तमान। डिस्पैचर शून्य है। कोई विचार यह काम कैसे करें?

private async void PushActions_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 
     string action = e.NewItems[0] as string; 
     if(action != null) 
     { 
      await RefreshUserInfoAsync(); 
     } 
    } 


    private async Task RefreshUserInfoAsync() 
    { 
     var userInfos = await SessionRepository.GetSessionUsersWithInfoAsync(SessionGuid, RoundGuid); 
     this.UserInfoList = new ObservableCollection<UserInfo>(userInfos); 
    } 

पाठ

उत्तर

18

मैं Jeffrey Richter साथ बात पर बल दिया और उसने मुझे जवाब दिया। व्यू मॉडल से, मैं CoreApplication.MainView.CoreWindow के माध्यम से डिस्पैचर पर जा सकता हूं।

var dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher; 

await dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() => { 
    this.UserInfoList = new ObservableCollection<UserInfo>(userInfos); 
}); 

मुझे आशा है कि यह किसी और में मदद करता है:

यहाँ अद्यतन है।

माइक

+0

मेरे लिए काम नहीं करता है। वीएस किसी कारण से 'प्रतीक्षा' नहीं पहचानता है। मैं विंडोज 8 एसडीके के साथ एमएस सतह के लिए विकास कर रहा हूँ। – Howie

+1

क्या आपके विधि हस्ताक्षर में एसिंक है? सार्वजनिक एसिंक कार्य GetCustomersAsync()। यदि ऐसा होता है, तो आप किस ढांचे का उपयोग कर रहे हैं? 4.5? यदि यह एक पीसीएल में है और आपने Win8 से कम कुछ चुना है तो यह वापस 4.0 पर वापस आ सकता है। मुझे लगता है कि 4.0 पुस्तकालयों में async/प्रतीक्षा करने के लिए एक गूंज पैकेज है। – MikeDouglasDev

+0

एक आकर्षण की तरह काम किया, बहुत बहुत धन्यवाद! – cesarferreira