При попытке показать прогрессбар выдается исключение - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть требование отображать индикатор выполнения в моем приложении WPF при переходе от одного представления к другому. У меня есть сервис, чтобы показать и закрыть индикатор выполнения. Мой код для отображения индикатора выполнения выглядит следующим образом. И он показывает отлично.

public void ShowProgressBar<T>() where T : Window
        {
            var thread = new Thread(
                new ThreadStart(
                    delegate ()
                    {
                        _progressWindow = Activator.CreateInstance<T>();
                        _progressWindow .Show();
                        _currentDispatcher = Dispatcher.CurrentDispatcher;
                        Dispatcher.Run();                        
                    }
                ));
            thread.SetApartmentState(ApartmentState.STA);
            thread.Priority = ThreadPriority.Highest;
            thread.IsBackground = true;
            thread.Start();
        }

После того, как отображается индикатор выполнения, я пытаюсь перейти к другому представлению, используя viewManagementService, в котором он удалил существующее представление из региона, если оно есть, и добавил новое представление и Так как я знаю последний метод, который был запущен, я пытаюсь закрыть свой индикатор выполнения там же классом обслуживания, внедренным в его конструктор, и мой закрывающий лог c выглядит следующим образом.

public void CloseProgressBar()
        {
            if (_progressWindow != null && _currentDispatcher != null)
            {
                //Close the window and shutdown the dispatcher.
                _currentDispatcher.Invoke(() => CloseWindow());
            }
            else if(_progressWindow != null && _currentDispatcher == null)
            {
                _progressWindow.Close();
            }            
        }
        /// <summary>
        /// CloseWindow
        /// </summary>
        private void CloseWindow()
        {
            _progressWindow.Close();
            _currentDispatcher.InvokeShutdown();
        }

Но при попытке сделать это иногда говорит, что задача уже отменена, или говорит, что задача принадлежит другому потоку. Я не мог понять, проблема в моем коде или в том, как я это делаю?

Любое предложение высоко ценится. Спасибо.

...