等待WindowState完成更改

问题描述 投票:0回答:1

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

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

c# wpf
1个回答
0
投票

我最终找到了一种解决方法(尽管不是很干净,但是避免了必须使用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;
}
© www.soinside.com 2019 - 2024. All rights reserved.