Вы должны вызвать SetApartmentState в потоке, чтобы переключить его на STA до того, как запустит поток.Это невозможно, если поток является потоком пула потоков или если вы используете BackgroundWorker.
В противном случае это плохая идея, диалоговое окно не будет иметь родителя и, вероятно, исчезнет за другим окном.И при этом это не будет модальным.Безусловно, лучшим решением является отображение этого диалога с помощью кода, который выполняется в главном потоке.Фактическая печать может все еще иметь место в рабочем потоке.При необходимости используйте Control.Invoke ().