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