我写了 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没有打开。
答案 0 :(得分:1)
文档指出异步工作的上限为200毫秒。你是否违反了这个前提?
DataRequest.GetDeferral():如果要在共享操作期间使用异步函数调用来生成DataPackage,请使用此方法。此函数必须在200ms内返回DataPackage对象,以防止操作超时。如果您的应用程序共享需要更多时间打包的内容(例如文件或照片集合),请不要使用此方法。而是使用SetDataProvider方法将委托分配给DataPackage并将该DataPackage返回到目标应用程序。
当我查看您的代码时,另一件让我高兴的是您调用GetDeferral方法两次而不是保存第一次调用的结果。