我有一个 Silverlight 5 应用程序,它使用ImageTools for Silverlight将 a 保存Canvas
到 PNG 图像。我知道我需要Canvas
在 UI 线程上使用并具有以下代码,该代码有效:
if (saveFileDialog.ShowDialog() == true)
{
var stream = saveFileDialog.OpenFile();
writeableBitmap.Dispatcher.BeginInvoke(delegate
{
ExtendedImage extendedImage = writeableBitmap.ToImage();
new PngEncoder().Encode(extendedImage, stream);
});
}
问题是,如果 Canvas 非常大,BeginInvoke
完成中的代码可能需要相当长的时间。由于这是在 UI 线程上运行的,因此它会在执行期间冻结浏览器窗口。
在用户选择保存导出图像的位置后,我想弹出一些子窗口告诉用户“请稍候...”,然后运行上面发布的图像保存代码,然后隐藏子窗口窗口自动,但我没有太多的运气来做到这一点。
对于初学者来说,BeginInvoke 代码是异步运行的,那么我怎么知道它何时完成呢?