Игнорировать ввод пользователя, когда пользовательский интерфейс занят - PullRequest
0 голосов
/ 02 февраля 2019

Я буду моделировать мою проблему, взяв две кнопки в примере приложения.В моем случае у меня есть UserControl вместе с tabcontrol.Когда на UserControl нажата кнопка, я пытаюсь получить родительское окно, отключаю его и выполняю некоторую работу с пользовательским интерфейсом в течение 1 минуты.После того, как пользовательский интерфейс свободен, я включаю родительское окно.

Моя проблема в том, что ParentWindow отключен, и когда пользователь нажимает на tabcontrol, пока пользовательский интерфейс занят, он не отвечает.Но как только пользовательский интерфейс выполняет свою работу, все пользовательские данные учитываются, и он сам переключает вкладки.Я хочу игнорировать пользовательский ввод, когда пользовательский интерфейс занят, пожалуйста, помогите.Какие-либо предложения?

В примере приложения есть 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 приведен код.Посмотрите, что я отключаю окно, но когда кнопка нажата, я получаю приветственное сообщение автоматически после освобождения пользовательского интерфейса.

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 Ответ

0 голосов
/ 02 февраля 2019

просто запустите свой длинный код в новом потоке

    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;
                });
            }
        });
    }

ожидаемый результат

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...