Windows Phone 8.1共享合同

时间:2015-06-30 06:51:56

标签: c# windows-runtime windows-phone windows-phone-8.1 winrt-xaml

我写了 Windows Phone 8.1(WINRT)应用。我正在尝试从我的应用中分享图片,该应用位于应用的 LocalStorage 中。我正在使用 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 个答案:

答案 0 :(得分:1)

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

  

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

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