任务:
在窗口上有几个按钮显示。有一段时间他们应该从屏幕上删除。完全删除/隐藏这些按钮后,才应拍摄屏幕截图。
问题:
在从屏幕上删除按钮之前拍摄屏幕截图。
其他信息:
因为在后台有一个长时间运行的操作,我需要保持UI响应,我正在使用异步任务。 Dispatcher.Invoke
用于在多线程环境中使用控件。 RemoveTemplateButtons()
基本上只是从屏幕上删除所有按钮。 CaptureScreenAndSave()
创建屏幕截图并将其保存到文件夹中。对于menthion来说也是一件事,在调试时,当断点退出else
语句时,按钮被删除。
代码:
//show the loading screen
loadingWindow.Show();
var slowTask = Task.Factory.StartNew(() =>
{
this.Dispatcher.Invoke((Action)(() =>
{
if ( /* ... */)
{
}
/* THE SCREENSHOT SHOULD BE TAKEN AFTER BUTTONS ARE REMOVED FROM SCREEN */
else
{
//remove template buttons from screen
this.RemoveTemplateButtons();
//captures screenshot of window and saves into folder
this.CaptureScreenAndSave();
}
}));
});
//long running operation
await slowTask.ContinueWith((s) =>
{
Parallel.For(0, count - 1, i =>
{
//do some work
});
});
//waits till long running operations are done
await slowTask;
//some other logic ( syncronous )
//hide loading screen
loadingWindow.Close();
编辑 - 删除模板按钮方法
private void RemoveTemplateButtons()
{
//in case if image searching happens more than once
foreach (var btn in templButtonDictionary)
{
canvasBackground.Children.Remove(btn.Value);
}
templButtonDictionary.Clear();
}