在从窗口中删除按钮之前拍摄屏幕截图

时间:2015-04-07 20:03:33

标签: c# wpf multithreading task system.io.file

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

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

其他信息:
因为在后台有一个长时间运行的操作,我需要保持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();
}

0 个答案:

没有答案
相关问题