Обычная практика - показать окно выполнения (с индикатором выполнения) в потоке пользовательского интерфейса и обновить прогресс от рабочего потока.Отображение Progressbar: наоборот
У меня много длинных операций, которые запускаются и запускаются в самой графической оболочке (что временно блокирует графический интерфейс). Требование состоит в том, чтобы показать индикатор выполнения всех существующих длительных операций. Обычным решением было бы перемещать длинные операции как потоки и обновлять прогресс оттуда. Но я не уверен в безопасности потоков этих длительных операций.
Есть ли способ показать окно прогресса в другом потоке (так что оно не замерзает), а затем обновить прогресс от самого основного потока графического интерфейса?
Я бы предположить, что было бы лучше в долгосрочной перспективе для вас реорганизовать затянувшийся код из UI и в отдельные классы, которые могут выполняться в другом потоке. Это сэкономит вам много горя и поможет вам написать лучший код в будущем. – Enigmativity
Я бы тоже хотел это сделать. Но эти операции были написаны кем-то еще в прошлом с участием файлов, базы данных, элементов управления пользовательского интерфейса и всех восприимчивых небезопасных вещей. Время и усилия не способствуют нарушению статус-кво. – Socrates
Я был бы склонен к разному, но я уверен, что у вас было бы лучшее представление о сложности, чем я. Я бы подумал, что вы бросаете хорошее время для разработчиков после плохого и просто ухудшаете ситуацию. Обучение рефактору сложных систем - это навык, с которым вы лучше справляетесь с практикой. – Enigmativity