Здравствуйте, Буравчик, Вы писали:
Б> AN>Как бороться?
Б> ProgressWorker.Run — асинхронный метод. Он вызывается параллельно с основным потоком.
Я так тоже думал.
Б> В данном коде подразумевается, что будет выполнена реструктуризация, а затем основной поток продолжит выполнение. А на самом деле поток реструктуризации и основной поток работают одновременно. Кто-кого из этих потоков обгонит — не известно.
Фигово только когда реструктуризации медленней.
Б> Вариантов несколько.
Б> Первый — убрать асинхронность (ProgressWorker.Run), т.е. пустить синхронизацию в основном потоке.
UI не понравится.
Б> Второй — синхронизировать два потока между собой. Я приводил код в [url=http://rsdn.ru/Forum/Message.aspx?mid=4282418&only=1]Re: Ошибки первого запускаАвтор: Буравчик
Дата: 24.05.11
[/url]. Этот же код сейчас в репозитории Януса.
По моему, я понял отличия, я делал только WaitOne без DoEvents(), а без этого ProgressWorker.Run видимо не работает.