I have a printer class that is capable of printing HTML via the WebBrowser object. I want to be able to print from a console application, but I get an error when my printer class tries to create a WebBrowser object:
WebBrowser browser = new WebBrowser();
Error:
ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot
be instantiated because the current thread is not in a
single-threaded apartment.
I tried adding a reference to System.Windows.Forms into my console application but that didn't work. I don't have the slightest idea of what's going on here, but I would appreciate the help.
Add STAThread attribute to your main method.
[STAThread]
public static Main()
{
...
}
Update: Here what you should do with thread where Browser is created
thread.SetApartmentState(ApartmentState.STA);
Update 2:
If one thread per app:
Thread.CurrentThread.SetApartmentState(ApartmentState.STA);