WinRT C# Metro アプリ (Windows リリース プレビュー) で共有ソース コントラクトを実装したいと考えています。私のアプリは任意のファイルを保存しています。ファイルシステムではなく、代わりに WCF サービス経由でデータを取得しますbyte[]
。今、私は自分のアプリでそのような「ファイル」を共有したいと考えています。
標準データ形式で見た唯一の可能性は、 でSetStorageItems()
メソッドを使用することDataPackage
です。StorageFile
したがって、データをバイト配列から共有可能なに変換するという課題に直面しています。メソッドを見つけてStorageFile.CreateStreamedFileAsync()
、このように使用したかった:
// filename: string
// fileContent: byte[]
// ... setting DataPackage title and description ...
DataRequestDeferral deferral = args.Request.GetDeferral();
var file = await Windows.Storage.StorageFile.CreateStreamedFileAsync(filename,
async stream => await stream.WriteAsync(fileContent.AsBuffer()), null);
args.Request.Data.SetStorageItems(new List<IStorageItem> { file });
deferral.Complete();
正常にコンパイルされますが、期待どおりに動作しません。標準のメールアプリで共有してみました。メール共有ビューが開き、新しいメールを作成できます。ファイルは (予想どおり) サムネイルなしで表示されますが、電子メールは送信できません。送信の進行状況が数分間表示された後、「{filename} をメールと共有できませんでした。」というエラーが発生します。共有チャームには、「問題が発生しました」と「[...] メールは現在共有できません。後でもう一度試してください。」と表示されます。
ファイル システムからをロードすると完全に機能しStorageFile
ます。メールが開き、数秒以内に送信されます。ここでは問題ありません。私CreateStreamedFileAsync()
の使い方が間違っているか、このメソッドにバグがあると思いますか?