Я создаю пользовательский элемент управления графиком и хотел бы иметь возможность отображать какую-то панель ожидания, пока выполняются другие команды (т. Е. Создается диаграмма).
Я использую ProgressBar
(System.Windows.Forms.ProgressBar
в режиме выделения) как часть этого элемента управления.Мне не нужно обновлять состояние индикатора выполнения, я просто хочу, чтобы он двигался снова и снова, пока график не будет создан.
Прямо сейчас я использую его в следующей схеме:
- Запустить панель ожидания (ProgressBar
появляется и запускается)
- Методы построения графика вызовов
- Когда график готов,строка ожидания будет скрыта.
Проблема в том, что некоторые методы построения графиков действительно требуют вычислений, и в такие моменты панель ожидания зависает.Как я могу избежать этих зависаний?Должен ли я использовать какой-нибудь рабочий / фоновый рабочий?И если да, то какой самый простой способ сделать это?
Обратите внимание, что мне не нужно менять состояние индикатора выполнения во время подготовки графика.Мне просто нужна строка ожидания для запуска, запуска во время всех вычислений и остановки после этого.
РЕДАКТИРОВАТЬ
ОК, как и предполагалось, я создал отдельный поток для этих сложных вычислений, чтобы избежать зависаний.
Но как дождаться окончания потока и не заморозить графический интерфейс?
Я пытался, как предлагалось здесь , что-то вроде этого:
Thread t = new Thread( () => { DoSomeLongAndDemandingTask(withParameters); });
t.Start();
t.Join()
// do something that needs to be done after thread finishes
InvokeMeAfterThreadFinished();
Но это зависает графический интерфейс.Есть ли другой способ избежать этих зависаний?