我将通过在示例应用程序中使用两个按钮来模拟我的问题。在我的实际案例中,我有一个用户控件和一个选项卡控件。当按下用户控件上的按钮时,我正在尝试获取父窗口并禁用它,并在UI上执行一些工作1分钟。UI可用后,我将启用父窗口。我的问题是,当父窗口被禁用并且当用户单击选项卡控件时,只要UI繁忙,它就不会无响应。但是,一旦 UI 完成其工作,所有用户输入都会被考虑在内,并且它会自行切换选项卡。我想在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 文件中,此处是代码。看到我正在禁用窗口,但是当按下按钮时,我在UI免费后自动收到hello消息。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; }
1 回答
米琪卡哇伊
TA贡献1998条经验 获得超6个赞
只需在新线程中运行长时间运行的代码
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;
});
}
});
}
预期结果
https://i.stack.imgur.com/dgRSm.gif
- 1 回答
- 0 关注
- 65 浏览
添加回答
举报
0/150
提交
取消