Использование backgroundworker по-прежнему останавливает пользовательский интерфейс при переключении на другую вкладку в пользовательском интерфейсе с включенной автоматической прокруткой (WPF) (C#) - PullRequest
0 голосов
/ 30 апреля 2020

Привет все,

В настоящее время я разрабатываю свою первую программу WPF (базовый c инструмент для автоматического перемещения файлов в структурированные пути к папкам) в C#, и это практически завершенный". Но я столкнулся с проблемой. Мой пользовательский интерфейс состоит из трех разных вкладок, которые отображают домашнюю страницу (с пользовательскими элементами управления), страницу журнала и страницу о программе. Когда я включаю автопрокрутку в текстовом поле журнала, пользовательский интерфейс останавливается, когда я переключаюсь на вкладку журнала. Программа выводит в журнал с помощью c textboxoutputter.

Код для включения автопрокрутки состоит из:

TXTBX_Log Xaml:

<TextBox x:Name="TXTBX_Log" Grid.Column="1" Grid.ColumnSpan="7" Grid.Row="1" Grid.RowSpan="7" Background="#FF3F3F46" Foreground="White" VerticalContentAlignment="Bottom" IsReadOnly="True" TextChanged="ScrollToEnd" />

Событие TXTBX_Log TextChanged:

private void ScrollToEnd(object sender, TextChangedEventArgs e)
    {
        TXTBX_Log.ScrollToEnd();
    }

Пользовательский интерфейс выглядит следующим образом:

UI

Я запускаю фонового работника, когда пользователь нажимает кнопку запуска. Идея состоит в том, что после того, как пользователь нажмет start, он / она может переключиться на вкладку журнала, чтобы следить за тем, что делает программа. Код, который я использовал для выполнения sh, вставлен ниже:

Кнопка запуска , fullAutomation установлена ​​в TRUE:

private void BTN_Start_Click(object sender, RoutedEventArgs e)
    {
        Console.WriteLine("Opdracht wordt uitgevoerd");
        if (fullAutomation == false)
        {
            archivingWorker = new BackgroundWorker();
            archivingWorker.DoWork += ArchivingWorker_DoWork;
            archivingWorker.RunWorkerCompleted += ArchivingWorker_RunWorkerCompleted;
            archivingWorker.RunWorkerAsync();
        }
        else
        {
            fullAutomationWorker = new BackgroundWorker();
            fullAutomationWorker.DoWork += FullAutomationWorker_DoWork;
            fullAutomationWorker.RunWorkerCompleted += FullAutomationWorker_RunWorkerCompleted;
            fullAutomationWorker.RunWorkerAsync();
        }
    }

Проблема, с которой я столкнулся, заключается в том, что поток пользовательского интерфейса зависает, когда работает фоновый работник, и пользователь переключается на вкладку журнала, когда включена автопрокрутка. У кого-нибудь есть идеи, почему это происходит?

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