Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 让WebBrowser控件在控制台应用程序中工作?_C#_.net_Webbrowser Control_Console Application - Fatal编程技术网

C# 让WebBrowser控件在控制台应用程序中工作?

C# 让WebBrowser控件在控制台应用程序中工作?,c#,.net,webbrowser-control,console-application,C#,.net,Webbrowser Control,Console Application,我有一个printer类,它能够通过WebBrowser对象打印HTML。我希望能够从控制台应用程序打印,但当我的printer类尝试创建WebBrowser对象时出现错误: WebBrowser browser = new WebBrowser(); 错误: ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the current thread is not in a

我有一个printer类,它能够通过WebBrowser对象打印HTML。我希望能够从控制台应用程序打印,但当我的printer类尝试创建WebBrowser对象时出现错误:

WebBrowser browser = new WebBrowser();
错误:

ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot 
be instantiated because the current thread is not in a 
single-threaded apartment.  

我尝试在控制台应用程序中添加对System.Windows.Forms的引用,但没有成功。我一点也不知道这里发生了什么,但我会感谢你的帮助

将STAThread属性添加到main方法

[STAThread]
public static Main()
{
    ...
}
更新:这里是创建浏览器的线程的处理方法

thread.SetApartmentState(ApartmentState.STA);
更新2:

如果每个应用程序有一个线程:

Thread.CurrentThread.SetApartmentState(ApartmentState.STA);

控制台模式的应用程序和网络浏览器是水和火。要使用WebBrowser,线程需要遵循单线程单元协议:

  • 必须是STA,如果创建线程,请在Main()或Thread.SetApartmentState()上使用[STAThread]
  • 必须在Winforms或WPF中提供消息循环Application.Run()

第二个要求对于WebBrowser来说很难,如果您不使用它,它将不会触发事件。检查代码以创建运行WB的线程。基于Winforms或WPF的GUI应用程序的主线程始终适合使用WB。

我的程序使用[StatThread]运行,但它实际上不打印。我有一个全新的控制台应用程序,它在主方法中从我的打印类调用打印方法。我不认为我正在控制台应用程序中创建任何其他线程。如果这不能回答您的问题,请告诉我谢谢。我不明白您如何将“therad”设置为当前线程?我的WebBrowser仅从主打印机类打开。我非常感谢迄今为止的帮助:)如果仍然感兴趣,请在上创建一个循环。感谢您提供
线程.SetApartmentState()
提示,在SSIS中,我无法使用
[STAThread]
,我花了很多时间寻找替代方案!