WPF почему блокируется окно и как разблокировать?
От: dsalodki Беларусь http://dsalodki.wix.com/resume
Дата: 17.11.22 12:45
Оценка:
как сделать что бы работа была в фоне и можно было работать с приложением или показать ProgressBar в модальном диалоговом окне?
сори я новичёк в WPF
        private void SimpleSynchronize_Click(object sender, RoutedEventArgs e)
        {
            var worker = new SimpleSynonymizer(Target.RichTextBox);

            new Thread(() =>
            {
                Thread.CurrentThread.IsBackground = true;
                Dispatcher.Invoke(() =>
                {
                    worker.Do();
                });

            }).Start();
        }

если написать так
            System.Threading.Tasks.Task.Run(() =>
            {
                while (true)
                {
                    Dispatcher.Invoke(() =>
                    {
                        System.Threading.Tasks.Task.Delay(100);
                    });
                }
}

то работает, может частые обращения к Target.RichTextBox блокируют ?
Отредактировано 17.11.2022 13:46 dsalodki . Предыдущая версия .
Re: WPF почему блокируется окно и как разблокировать?
От: karbofos42 Россия  
Дата: 17.11.22 13:51
Оценка: 3 (1) +2
Здравствуйте, dsalodki, Вы писали:

D>как сделать что бы работа была в фоне и можно было работать с приложением или показать ProgressBar в модальном диалоговом окне?

D>сори я новичёк в WPF

Если хочется поток, то взять BackgroundWorker и через него в фоне выполнять (по сути он и создаёт поток, но несколько удобнее работать и прогресс показывать).
Либо Task отдельный запускать.
Ещё почитать что такое Dispatcher и будет понятно почему первый вариант замораживается.
По сути Dispatcher.Invoke выполняет указанный метод в UI-потоке, где окно крутится.
Следовательно, пока метод работает, никакие события окно не обработает.
В Dispatcher.Invoke лучше вызывать только изменение окна, а не какие-то сложные расчёты.
Re[2]: WPF почему блокируется окно и как разблокировать?
От: dsalodki Беларусь http://dsalodki.wix.com/resume
Дата: 17.11.22 16:39
Оценка:
Переписал на BackgroundWorker и вынес взаимодействие с контролами, получилось при этом ускорить приложение.
Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.