我目前正在使用一种截图工具来捕获屏幕图像。当我单击“新建片段”时,程序需要在工具窗口最小化后创建一个屏幕截图。当前它是这样的。
//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();
是否有一种方法可以在调用WindowState
之前等待SnippingWindow
更改动画完成?我不希望拨打Thread.Sleep
,但这似乎是唯一可行的方法。
我可以在调用Snip之前关闭窗口,但这似乎并不能及时“摆脱它”,因为它是在同一线程上执行的。
我最终找到了一种解决方法(尽管不是很干净,但是避免了必须使用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;
}