1

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()の使い方が間違っているか、このメソッドにバグがあると思いますか?

4

3 に答える 3

1

CreateStreamedFileAsync に渡されるコールバックでは、オブジェクトを実際に破棄する必要があります。これは、完了したことを OS に通知します。

ここに完全な例を書きました

于 2013-03-15T11:26:08.600 に答える
0

わかりました、おそらくメール アプリのプレビュー バージョンは、共有対象のコントラクトを正しく処理しません。http://code.msdn.microsoft.com/windowsapps/Sharing-Content-Target-App-e2689782の SDK サンプル アプリ「コンテンツ ターゲット アプリの共有」を使用して、上記の方法でメモリ内に作成された StorageItem を共有すると、StorageFile.CreateStreamedFileAsync()正常に動作します。

byte[]したがって、メモリ内配列を共有する場合は、この方法を使用する必要があります。テストのために、別のアプリからのデータを Visual Studio と共有する場合は、共有ターゲット アプリが Visual Studio で実行されないことを確認してください。すると、不思議なことに共有サイドバーが自動的に消えてしまいます...

于 2012-07-24T09:26:33.217 に答える
0

メールアプリはファイル共有の対象ではありません。http://blogs.msdn.com/b/b8/archive/2012/06/14/building-the-mail-app.aspxから:「メールは、テキスト、リンク、および画像の共有をサポートしています。」

共有コントラクトには、共有ソースと共有ターゲットの 2 つの部分があることに注意してください。ご存知のように、テキスト、画像、URI、ファイルなど、それらの間で共有できるさまざまなデータ形式があります。サポートされているさまざまなデータ形式の完全なリストは、http://msdn.microsoft.com/en-us/library/windows/apps/hh771179.aspxにあります。

Share Target Sample アプリを使用して、ファイルが適切に共有されていることをテストすることをお勧めします。これを共有すると、アプリから共有されているすべてのものがソースとして表示されます (また、共有するファイルを受け入れます)。http://code.msdn.microsoft.com/windowsapps/Sharing-Content-Target-App-e2689782からダウンロードできます。Share Source Sample アプリを例として使用し、このアプリのコードを活用することもできます。http://code.msdn.microsoft.com/windowsapps/Sharing-Content-Source-App-d9bffd84からダウンロードできます。

それが役立つことを願っています!

于 2012-07-23T14:56:01.600 に答える