2016-06-08 62 views
1

我想處理的共享操作 代碼:ShareOperation.ReportCompleted()異常結果被扔在UWP

protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args) 
{ 
    ShareOperation shareOperation = args.ShareOperation; 
    Uri uriReceived = null; 
    if (shareOperation.Data.Contains(StandardDataFormats.WebLink)) 
     uriReceived = await shareOperation.Data.GetWebLinkAsync(); 
    shareOperation.ReportCompleted(); 
} 

它崩潰的shareOperation.ReportCompleted();顯示爲

錯誤消息「與索引中指定的鍵不匹配。「

我試圖尋找此錯誤登陸我this的問題,但似乎這是走了與後來的版本,現在我面對這個問題你怎麼建議我處理這一個問題。

回答

2

根據接收數據的報告共享狀態的部分,

其結果是,你不應該,除非你的應用程序是在能夠被用戶駁回了點調用它。

我猜這個例外的原因是報告動作需要用戶的權限。如果您直接撥打ShareTargetActivated中的shareOperation.ReportCompleted();,您將跳過用戶的授權。這似乎是不允許的。 解決方法是,您可以使用Button_ClickOnGotFocus之類的函數處理代碼shareOperation.ReportCompleted();。以下代碼示例可以解決您的問題。

App.xaml.cs代碼:

protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args) 
{ 
    Frame rootFrame = Window.Current.Content as Frame; 
    if (rootFrame == null) 
    { 
     rootFrame = new Frame(); 
     rootFrame.Language = Windows.Globalization.ApplicationLanguages.Languages[0]; 
     rootFrame.NavigationFailed += OnNavigationFailed; 
     Window.Current.Content = rootFrame; 
    } 
    rootFrame.Navigate(typeof(MainPage), args.ShareOperation); 
    Window.Current.Activate();   
} 

MainPage.xaml.cs中的代碼:

ShareOperation shareOperation; 
    protected override async void OnGotFocus(RoutedEventArgs e) 
    { 
     Uri uriReceived = null; 
     if (shareOperation.Data.Contains(StandardDataFormats.WebLink)) 
      uriReceived = await shareOperation.Data.GetWebLinkAsync(); 
     this.shareOperation.ReportCompleted(); 
     base.OnGotFocus(e); 
    } 
    protected override async void OnNavigatedTo(NavigationEventArgs e) 
    { 
     this.shareOperation = (ShareOperation)e.Parameter; 
    } 

更多詳細信息請參考官方sharetarget sample

+0

感謝您的幫助!我想在我的情況下,我應該使用協議不共享目標。 – AbsoluteSith