任务:
在窗口上有几个按钮显示。有一段时间应该将它们从屏幕上移除。在这些按钮被完全删除/隐藏后,才应该拍摄屏幕截图。
问题:
屏幕截图是在按钮从屏幕上移除之前拍摄的。
附加信息:
由于后台有长时间运行的操作,并且我需要保持 UI 响应,我正在使用异步任务。Dispatcher.Invoke
用于能够在多线程环境中使用控件。RemoveTemplateButtons()
基本上只是从屏幕上删除所有按钮。CaptureScreenAndSave()
创建屏幕截图并将其保存到文件夹中。还有一件事要提到,调试时,当断点退出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();
}