0

画像をダウンロードする機能があり、ダウンロードが完了するとトースト通知がトリガーされます。ユーザーがトースト通知をクリックしたときに、既定のプログラムを使用してファイルを開きたい。しかし、匿名デリゲートの内部にある場合、ランチャーは失敗します。

匿名デリゲートを設定するコードは次のとおりです

            var savefolder= await KnownFolders.PicturesLibrary.GetFolderAsync("savefolder");
            Uri source;
            if (!Uri.TryCreate(ImageUrl, UriKind.Absolute, out source))
            {
                return;
            }
            var destination = imageFileName;
            if (string.IsNullOrWhiteSpace(destination))
            {
                return;
            }
            var destinationFile = await savefolder.CreateFileAsync(destination, CreationCollisionOption.GenerateUniqueName);
            var httpClient = new HttpClient();
            var data = await httpClient.GetByteArrayAsync(source);
            var targetStream = await destinationFile.OpenAsync(FileAccessMode.ReadWrite);
            await targetStream.AsStreamForWrite().WriteAsync(data, 0, data.Length);
            await targetStream.FlushAsync();
            targetStream.Dispose();
            TypedEventHandler<ToastNotification, object> openPic =
                async delegate(ToastNotification toastSender, object toastArgs)
                {
                    var success = await Launcher.LaunchFileAsync(destinationFile);
                    var i = 0;
                };
            CommentProcessing.LoadToast("The image has been saved to your pictures library", openPic);

トースト機能はこちら

    public static void LoadToast(string text, TypedEventHandler<ToastNotification, object> toastActivated = null)
    {
        var toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText01);
        var elements = toastXml.GetElementsByTagName("text");
        elements[0].AppendChild(toastXml.CreateTextNode(text));
        var toast = new ToastNotification(toastXml);
        if (toastActivated != null)
            toast.Activated += toastActivated;
        ToastNotificationManager.CreateToastNotifier().Show(toast);
    }

現在、ほぼ計画どおりに機能しています。デリゲートが起動し、ランチャーを呼び出します。しかし、起動しようとすると失敗します。

コードをステップ実行できました。デリゲートが起動しても、すべてのファイル情報はそのままです。

何か案は?

4

1 に答える 1

2

少し長いショットですが、画像のオープニングをディスパッチャにオフロードしてみてください。

TypedEventHandler<ToastNotification, object> openPic =
    async delegate(ToastNotification toastSender, object toastArgs)
    {
        Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
            () => var success = await Launcher.LaunchFileAsync(destinationFile);
    };
于 2013-05-21T04:42:51.733 に答える