У меня есть надстройка C # для продукта моделирования UML, который автоматически рисует диаграммы и поддерживает их. Я обрабатываю более масштабные модели предприятия с более чем 6000 диаграммами. Это занимает много времени (даже на более быстрых машинах). Поэтому я создал версию, которая использует фоновый рабочий поток для запуска «пакетной» части задания, в то время как «передний план» имеет модальный диалог, который позволяет мне остановить обработку на ранней стадии. В противном случае, из-за пользовательского интерфейса программы моделирования, я не могу отправить сообщение «STOP» в Надстройку.
Фоновая версия, кажется, занимает в два раза больше времени, чем однопоточная версия. На самом деле, я ожидал, что версия фонового рабочего потока будет многопоточной, но, насколько мне известно, она не работает в отдельном потоке.
Модальное диалоговое окно и Надстройка взаимодействуют корректно, поэтому две части функциональности отображаются в отдельных потоках. Пакет выполняется в .RunWorkerAsync () через метод DoWork. Но если я добавлю трассировки в код, они сообщат, что они не работают в отдельных потоках (поскольку для параметра .Invoke Required задано значение false).
Я бы ожидал небольшое количество накладных расходов, но не так много (100%).
Что происходит? Должен ли я перейти к истинной многопоточности (в отличие от BackgroundWorker)?
ТИА,
Paolo