DataPackage.SetDataProvider(String, DataProviderHandler) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Legt einen Delegaten fest, um Anforderungen von der Ziel-App zu behandeln.
public:
virtual void SetDataProvider(Platform::String ^ formatId, DataProviderHandler ^ delayRenderer) = SetDataProvider;
void SetDataProvider(winrt::hstring const& formatId, DataProviderHandler const& delayRenderer);
public void SetDataProvider(string formatId, DataProviderHandler delayRenderer);
function setDataProvider(formatId, delayRenderer)
Public Sub SetDataProvider (formatId As String, delayRenderer As DataProviderHandler)
Parameter
- formatId
-
String
Platform::String
winrt::hstring
Gibt das Format der Daten an. Es wird empfohlen, diesen Wert mithilfe der StandardDataFormats-Klasse festzulegen.
- delayRenderer
- DataProviderHandler
Ein Delegat, der für die Verarbeitung von Anforderungen aus einer Ziel-App verantwortlich ist.
Beispiele
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.Storage.Streams;
using Windows.UI.Xaml.Media.Imaging;
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.Storage.Streams;
using Windows.UI.Xaml.Media.Imaging;
using Windows.ApplicationModel.DataTransfer;
using Windows.Graphics.Imaging;
namespace ShareMainBetaCS
{
public sealed partial class ShareFiles : Page
{
private StorageFile imageFile = null;
private RandomAccessStreamReference imageStreamRef = null;
private RandomAccessStreamReference dataPackageThumbnail = null;
private IRandomAccessStream imageStream = null;
public ShareFiles()
{
this.InitializeComponent();
pickImageButton.Click += new RoutedEventHandler(pickImageButton_Click);
this.ShareSourceLoad();
}
async void pickImageButton_Click(object sender, RoutedEventArgs e)
{
FileOpenPicker imagePicker = new FileOpenPicker
{
ViewMode = PickerViewMode.Thumbnail,
SuggestedStartLocation = PickerLocationId.PicturesLibrary,
FileTypeFilter = { ".jpg", ".png", ".bmp", ".gif", ".tif" }
};
this.imageFile = await imagePicker.PickSingleFileAsync();
if (this.imageFile != null)
{
this.imageStreamRef = RandomAccessStreamReference.CreateFromFile(this.imageFile);
this.dataPackageThumbnail = this.imageStreamRef;
this.imageStream = await this.imageFile.OpenAsync(FileAccessMode.Read);
}
}
public void ShareSourceLoad()
{
DataTransferManager datatransferManager;
datatransferManager = DataTransferManager.GetForCurrentView();
datatransferManager.DataRequested += new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(this.DataRequested);
}
void DataRequested(DataTransferManager sender, DataRequestedEventArgs e)
{
e.Request.Data.Properties.Title = "Hello World!";
e.Request.Data.Properties.Description = "This example shows how to use delayed sharing.";
if (this.dataPackageThumbnail != null)
{
e.Request.Data.Properties.Thumbnail = this.dataPackageThumbnail;
}
e.Request.Data.SetDataProvider(StandardDataFormats.Bitmap,
new DataProviderHandler(this.OnDeferredImageRequestedHandler));
}
async void OnDeferredImageRequestedHandler(DataProviderRequest request)
{
// Here we provide updated Bitmap data using delayed rendering
if (this.imageStream != null)
{
DataProviderDeferral deferral = request.GetDeferral();
try
{
InMemoryRandomAccessStream inMemoryStream = new InMemoryRandomAccessStream();
// Decode the image
BitmapDecoder imageDecoder = await BitmapDecoder.CreateAsync(this.imageStream);
// Re-encode the image at 50% width and height
BitmapEncoder imageEncoder = await BitmapEncoder.CreateForTranscodingAsync(inMemoryStream, imageDecoder);
imageEncoder.BitmapTransform.ScaledWidth = (uint)(imageDecoder.OrientedPixelHeight * 0.5);
imageEncoder.BitmapTransform.ScaledHeight = (uint)(imageDecoder.OrientedPixelHeight * 0.5);
await imageEncoder.FlushAsync();
request.SetData(RandomAccessStreamReference.CreateFromStream(inMemoryStream));
}
catch (Exception ex)
{
// Handle the exception
}
finally
{
deferral.Complete();
}
}
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
}
}
Hinweise
Verwenden Sie die SetDataProvider-Methode , wenn Ihre App ein bestimmtes Format unterstützt, die Daten aber erst dann bereitstellen möchte, wenn die Ziel-App sie anfordert. Wir empfehlen Ihnen, diese Methode zu verwenden, wenn Ihre App Inhalte freigibt, die eine erhebliche Verarbeitungszeit erfordern können. z. B. das Freigeben einer Auswahl von Fotos, Videos oder Dateien.
Wenn Sie diese Methode verwenden, müssen Sie ein Format und eine Funktion angeben. Sie können das Format mithilfe der StandardDataFormats-Klasse angeben, oder Sie können einen Zeichenfolgenwert für ein benutzerdefiniertes Format verwenden. Die Funktion muss Daten mithilfe einer Methode wie SetData in das DataPackage einfügen.
Sie müssen die Erweiterung der StorageItems angeben, die an das Freigabeziel übergeben werden.
Die SetDataProvider-Methode unterscheidet sich von der GetDeferral-Methode der DataRequest-Klasse . Mit GetDeferral kann eine Quell-App eine Funktion aufrufen, die die Daten sofort im DataPackage-Objekt platziert. Die SetDataProvider-Methode ist für komplexere Freigabevorgänge vorgesehen, bei denen das Packen der freigegebenen Daten zeit- oder ressourcenintensiver ist.