亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 UI 繁忙時忽略用戶輸入

在 UI 繁忙時忽略用戶輸入

C#
拉風的咖菲貓 2022-08-20 16:44:21
我將通過在示例應用程序中使用兩個按鈕來模擬我的問題。在我的實際案例中,我有一個用戶控件和一個選項卡控件。當按下用戶控件上的按鈕時,我正在嘗試獲取父窗口并禁用它,并在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


查看完整回答
反對 回復 2022-08-20
  • 1 回答
  • 0 關注
  • 83 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號