Я почти уверен, что ваша проблема в вашем экземпляре UIUpdater
объекта с именем updater
.Похоже, этот объект объявлен глобально и, таким образом, распределяется между вызовами.
Пропуская немного кода, у вас есть следующее:
updater.eventName = "UpdateStatusBox"
bgwWorker.ReportProgress(1, updater)
updater.eventName = "UpdateStatusBar"
bgwWorker.ReportProgress(2, updater)
Хотя вы вызываете ReportProgress()
линейно, этоне запускает ваше событие ProgressChanged
немедленно и не блокируется, пока этот метод не завершится.Если вы подумаете об этом, это лишит смысла многопоточность.
Другими словами, у вас есть глобальный объект, для которого вы устанавливаете свойство.Затем вы говорите: «Когда у кого-то есть шанс, сделайте что-нибудь с этим».Затем вы изменяете свойство этого глобального объекта, и иногда это происходит до того, как произойдет "кто-то что-то сделал".
Решение состоит в том, чтобы создать две глобальные переменные,один для каждого возможного события или просто создать переменную экземпляра, когда это необходимо.Я не уверен, что его поток безопасно использовать глобальную переменную, как вы, поэтому я бы рекомендовал просто создать переменную экземпляра.Фактически, объект состояния, который вы передаете ReportProgress
, может быть просто строкой.