2

任务:
在窗口上有几个按钮显示。有一段时间应该将它们从屏幕上移除。在这些按钮被完全删除/隐藏后,才应该拍摄屏幕截图。

问题:
屏幕截图是在按钮从屏幕上移除之前拍摄的。

附加信息:
由于后台有长时间运行的操作,并且我需要保持 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();
}
4

0 回答 0