3

共有チャームを使用して、DocumentsLibrary の Document.pdf という名前のファイルを電子メール添付しようとしています。以下のコードは、ローカル マシンで完全に動作します。

    private async void OnDataRequestedFiles(DataTransferManager sender, DataRequestedEventArgs e)
    {
        List<IStorageItem> shares = new List<IStorageItem>();
        StorageFile filetoShare = await Windows.Storage.KnownFolders.DocumentsLibrary.GetFileAsync("Document.pdf");

        if (filetoShare != null)
        {
            shares.Add(filetoShare);
            filetoShare = null;
        }

        if (shares != null)
        {
            DataPackage requestData = e.Request.Data;
            requestData.Properties.Title = "Title";
            requestData.Properties.Description = "Description"; // The description is optional.
            requestData.SetStorageItems(shares);
            shares = null;

        }
        else
        {
            e.Request.FailWithDisplayText("File not Found.");
        }
    }

しかし、まったく同じコードを Windows Surface タブレットで実行すると、 「今共有するものは何もありません」という恐ろしいメッセージが表示されます。チャーム フライアウト エリアの右側にあります。

役立つ背景をもう少し説明します。

  • ファイル ピッカーを使用するつもりはありません...探しているファイルが正確にわかっている
  • マニフェストでドキュメント ライブラリ機能を有効にしました
  • マニフェストに pdf のファイル タイプの関連付けを追加しました
  • はい、ファイルは存在し、ドキュメント ライブラリにあります。
  • 表面のメールアプリでメールアカウントが適切に設定されている
  • タブレットからテキストメールを正常に送信できます...添付ファイル付きのメールは送信できません

私が言ったように、これは私の Win 8 開発マシンで期待どおりに動作しますが、Surface では動作しません。Surface のファイルまたはフォルダーのアクセス許可が異なるのでしょうか?

助けてくれてありがとう...これは私を夢中にさせています

4

3 に答える 3

2

私はついにそれを理解しました-問題は、私のイベントハンドラーが非同期であったことでした(そのため、 awaitを使用してStorageFile変数を設定できました)。

コードの前半でStorageFile変数を設定して、イベント ハンドラーが呼び出されたときに既に使用できるようにすることで、この問題を解決しました。

なぜそれが開発マシンで機能したのかはまだわかりませんが、WinRT サーフェスでは機能しません...

于 2012-11-16T20:37:50.493 に答える