画像をダウンロードする機能があり、ダウンロードが完了するとトースト通知がトリガーされます。ユーザーがトースト通知をクリックしたときに、既定のプログラムを使用してファイルを開きたい。しかし、匿名デリゲートの内部にある場合、ランチャーは失敗します。
匿名デリゲートを設定するコードは次のとおりです
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);
}
現在、ほぼ計画どおりに機能しています。デリゲートが起動し、ランチャーを呼び出します。しかし、起動しようとすると失敗します。
コードをステップ実行できました。デリゲートが起動しても、すべてのファイル情報はそのままです。
何か案は?