我將通過在示例應用程序中使用兩個按鈕來模擬我的問題。在我的實際案例中,我有一個用戶控件和一個選項卡控件。當按下用戶控件上的按鈕時,我正在嘗試獲取父窗口并禁用它,并在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 關注
- 83 瀏覽
添加回答
舉報
0/150
提交
取消