Getting WebBrowser Control To Work In Console Application?

sooprise picture sooprise · Apr 1, 2011 · Viewed 32.2k times · Source

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.

Answer

Sasha Reminnyi picture Sasha Reminnyi · Apr 1, 2011

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);