ImageTools for SilverlightCanvas
を使用して PNG 画像に保存するSilverlight 5 アプリケーションがあります。Canvas
UI スレッドで を操作する必要があり、次のコードが機能する必要があることを理解しています。
if (saveFileDialog.ShowDialog() == true)
{
var stream = saveFileDialog.OpenFile();
writeableBitmap.Dispatcher.BeginInvoke(delegate
{
ExtendedImage extendedImage = writeableBitmap.ToImage();
new PngEncoder().Encode(extendedImage, stream);
});
}
BeginInvoke
問題は、Canvas が非常に大きい場合、 のコードが完了するまでにかなりの時間がかかることです。これは UI スレッドで実行されているため、実行中にブラウザ ウィンドウがフリーズします。
ユーザーがエクスポートされた画像を保存する場所を選択した後、「お待ちください...」とユーザーに通知する子ウィンドウをポップアップし、上記の画像保存コードを実行し、その後子を非表示にしますウィンドウが自動的に開きますが、それを達成するのはあまり運がありません。
まず、BeginInvoke コードは非同期で実行されるため、いつ完了したかを知るにはどうすればよいでしょうか?