Getting WebBrowser Control To Work In Console Application?

.net, c#, console-application, webbrowser-control

Solution

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

Problem

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.

Original source

Related problems