Чтобы добавить к ограничению Вадима, вы можете установить принтер по умолчанию перед печатью, используя:
static void SetAsDefaultPrinter(string printerDevice)
{
foreach (var printer in PrinterSettings.InstalledPrinters)
{
//verify that the printer exists here
}
var path = "win32_printer.DeviceId='" + printerDevice + "'";
using (var printer = new ManagementObject(path))
{
printer.InvokeMethod("SetDefaultPrinter",
null, null);
}
return;
}
И немного изменить метод PrintHtml с помощью:
public void PrintHtml(string htmlPath, string printerDevice)
{
if (!string.IsNullOrEmpty(printerDevice))
SetAsDefaultPrinter(printerDevice);
Task.Factory.StartNew(() => PrintOnStaThread(htmlPath), CancellationToken.None, TaskCreationOptions.None, _sta).Wait();
}
Теперь я не знаю, как это будет справедливо в условиях интенсивной печати, учитывая, что могут быть проблемы с параллелизмом при частой смене принтера по умолчанию. Но пока это лучшее, что я придумал, чтобы исправить это ограничение.