Windows Phone 8.1共享合同

本文关键字:共享 合同 Phone Windows | 更新日期: 2023-09-27 18:00:36

我写了一个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未打开。

Windows Phone 8.1共享合同

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

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

当我查看您的代码时,另一件让我印象深刻的事情是,您调用了GetDeferral方法两次,而不是保存第一次调用的结果。