我将通过在示例应用程序中单击两个按钮来模拟我的问题。在我的实际情况下,我有一个TabControl沿用户控件。当在UserControl上按下按钮时,我试图获取父窗口并将其禁用,并在UI上执行一些工作1分钟。释放UI后,我将启用父窗口。
我的问题是当ParentWindow被禁用,并且当在TabControl的用户点击,只要用户界面是忙它仍然没有响应。但只要做UI的工作,所有的用户输入被考虑到,它本身切换标签。用户界面繁忙时,我想忽略用户输入,请帮助。有什么建议么?
在这里的示例应用程序是XAML
<StackPanel Orientation="Vertical">
<Button Height="20" Width="180" Click="Button_Click"
>Hello</Button>
<Button Height="20" Width="180" Click="Button_Click_1">Do Nothing</Button>
</StackPanel>
在xaml.cs文件中,这里是代码。看到我禁用了Window,但是当按下按钮时,在UI空闲之后我会自动收到问候消息。
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello");
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
Window.GetWindow(this).IsEnabled=false;
Thread.Sleep(5000);
Window.GetWindow(this).IsEnabled=true;
}
答案 0 :(得分:0)
只需在新线程中运行长时间运行的代码
private void Button_Click_1(object sender, RoutedEventArgs e)
{
Task.Run(() =>
{
try
{
this.Dispatcher.Invoke(() =>
{
Window.GetWindow(this).IsEnabled = false;
});
Thread.Sleep(5000);
}
finally
{
this.Dispatcher.Invoke(() =>
{
Window.GetWindow(this).IsEnabled = true;
});
}
});
}
预期结果