等待WindowState完成更改

我目前正在使用一种截图工具来捕获屏幕图像。当我单击“新建片段”时,程序需要在工具窗口最小化后创建一个屏幕截图。当前它是这样的。

//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之前关闭窗口,但这似乎并不能及时“摆脱它”,因为它是在同一线程上执行的。

taisen518 回答:等待WindowState完成更改

我最终想出了一种解决方法(尽管不是很干净,但是避免了使用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://www.f2er.com/3164969.html

大家都在问