首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待WindowState完成更改

等待WindowState完成更改
EN

Stack Overflow用户
提问于 2019-11-05 01:09:12
回答 1查看 62关注 0票数 0

我目前正在开发一个截取屏幕图像的截图工具。当我点击"New Snip“时,程序需要在工具窗口最小化后创建一个屏幕截图。它目前的工作方式是这样的。

代码语言:javascript
复制
//Minimize Tool Window
WindowState = WindowState.Minimized;

//Set delay to allow window to finish its minimizing animation
Thread.Sleep(200);

//Show screen capture with snipping         
SnippingWindow sw = new SnippingWindow();
sw.ShowDialog();

//Close minimized window
Close();

在调用SnippingWindow之前,有没有办法等待WindowState更改动画完成?我不希望进行Thread.Sleep调用,但这似乎是唯一有效的方法。

我可以在调用Snip之前关闭窗口,但这似乎也不能及时“让它离开”,因为它是在同一个线程上执行的。

EN

回答 1

Stack Overflow用户

发布于 2019-11-05 02:11:54

我最终找到了一个变通方法(虽然不是很干净,但它避免了使用Sleep)。

我将窗口的不透明度绑定到一个可以使用BackgroundWorker更改的值。当BackgroundWorker启动时,它将不透明度设置为0。一旦工作进程完成,RunWorkerCompleted事件就会处理新的截取屏幕快照。

这可确保在拍摄屏幕截图之前工具窗口不会挡路。

我尝试先从后台工作进程关闭窗口,但它没有正确地执行关闭操作。

代码语言:javascript
复制
private void Bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
       Close();
       SnippingWindow sw = new SnippingWindow();
       sw.ShowDialog();
}

private void Bw_DoWork(object sender, DoWorkEventArgs e)
{
     //Windows Opacity is bound to this value.
     //I had to implement iNotifyPropertyChanged on this property. 
     OpacityValue = 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58698105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档