1

我写了一个Windows Phone 8.1(WINRT)App。我试图从我的应用程序共享图片,该应用程序位于应用程序的LocalStorage中。我正在使用Windows Phone 8.1共享合同。Windows Phone 8.1分享合同

private async void OnShareDataRequested(DataTransferManager sender, DataRequestedEventArgs _dataRequestedEventArgs) 
{ 
    _dataRequestedEventArgs.Request.GetDeferral(); 
    List<StorageFile> ListObject = new List<StorageFile>(); 
    Uri UriObject = new Uri(FileLocation,UriKind.RelativeOrAbsolute); 

    _dataRequestedEventArgs.Request.Data.Properties.Title = "Dr. App"; 
    _dataRequestedEventArgs.Request.Data.Properties.Description = "Photo from my Dr. App Album."; 


    StorageFolder StorageFolderObject; 
    StorageFile StorageFileObject; 
     try 
     { 

      StorageFolderObject = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFolderAsync(LocalCache); 
      StorageFileObject = await StorageFolderObject.GetFileAsync(FileNameSaved); 

      _dataRequestedEventArgs.Request.Data.Properties.Thumbnail = RandomAccessStreamReference.CreateFromFile(StorageFileObject); 
      _dataRequestedEventArgs.Request.Data.SetBitmap(RandomAccessStreamReference.CreateFromFile(StorageFileObject)); 


      ListObject.Add(StorageFileObject); 
      _dataRequestedEventArgs.Request.Data.SetStorageItems(ListObject); 
     } 
     catch(Exception ex_) 
     { 

     } 
     finally 
     { 
      _dataRequestedEventArgs.Request.GetDeferral().Complete(); 

     } 


} 

protected override void OnNavigatedFrom(NavigationEventArgs e) 
{ 
    DataTransferManager.GetForCurrentView().DataRequested -= OnShareDataRequested; 
    base.OnNavigatedFrom(e); 
} 

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    DataTransferManager.GetForCurrentView().DataRequested += OnShareDataRequested; 
    base.OnNavigatedTo(e); 
} 
private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    DataTransferManager.ShowShareUI(); 
} 

我得到制备内容分享,然后在第二个消失。 ShareUI不打开。

回答

1

该文档指出异步工作的上限为200毫秒。你违反这个前提?

DataRequest.GetDeferral():如果要在共享操作期间使用异步函数调用来生成DataPackage,请使用此方法。该函数必须在200ms内返回一个DataPackage对象以防止操作超时。如果您的应用共享需要更多时间进行打包的内容,例如一组文件或照片,请不要使用此方法。相反,使用SetDataProvider方法将委托分配给DataPackage并将该DataPackage返回给目标应用程序。

当我查看代码时,另一件突出的事情是您调用GetDeferral方法两次,而不是保存第一次调用的结果。

+0

正确的说... –

+0

你可以看看我的问题:http://stackoverflow.com/questions/31108118/highlight-days-on-winrtxamltoolkit-controls-calendar –

+0

是200毫秒,造成超时? –