我目前正在开发一个截取屏幕图像的截图工具。当我点击"New Snip“时,程序需要在工具窗口最小化后创建一个屏幕截图。它目前的工作方式是这样的。
//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之前关闭窗口,但这似乎也不能及时“让它离开”,因为它是在同一个线程上执行的。
发布于 2019-11-05 02:11:54
我最终找到了一个变通方法(虽然不是很干净,但它避免了使用Sleep)。
我将窗口的不透明度绑定到一个可以使用BackgroundWorker更改的值。当BackgroundWorker启动时,它将不透明度设置为0。一旦工作进程完成,RunWorkerCompleted事件就会处理新的截取屏幕快照。
这可确保在拍摄屏幕截图之前工具窗口不会挡路。
我尝试先从后台工作进程关闭窗口,但它没有正确地执行关闭操作。
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;
}https://stackoverflow.com/questions/58698105
复制相似问题