C# 如何在控制台应用程序中使用WebView2

C# 如何在控制台应用程序中使用WebView2,c#,webview2,C#,Webview2,当我运行上面的代码时,RecreReWebView2Async将获得此异常 “设置后无法更改线程模式。(HRESULT的异常: 0x80010106(RPC_E_已更改_模式))“ 我 如果在控制台或windows服务中没有winform dlg,我需要做什么来运行此操作 事实证明,关键在于主函数的[StatThread] string text = "return 'test';"; var webView = new Microsoft.Web.WebView2.WinF

当我运行上面的代码时,RecreReWebView2Async将获得此异常

“设置后无法更改线程模式。(HRESULT的异常: 0x80010106(RPC_E_已更改_模式))“ 我 如果在控制台或windows服务中没有winform dlg,我需要做什么来运行此操作


事实证明,关键在于主函数的[StatThread]

string text = "return 'test';";
var webView = new Microsoft.Web.WebView2.WinForms.WebView2();
webView.EnsureCoreWebView2Async(null).RunSynchronously();
var srun = webView.CoreWebView2.ExecuteScriptAsync(text);
其他值得注意的项目

  • 有时您需要设置应用程序的位,因为使用 在创建webview2 COM时,任何CPU的运行都将导致不确定的等待 反对
  • 您可能需要设置webview2源属性以聚焦 实例转化为存在

它可能需要一个SynchronizationContext,因此它可以捕获一个可以恢复到的执行上下文(其调度程序)<代码>运行同步()不能在此处使用。
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Microsoft.Web.WebView2.WinForms.WebView2 webView21 = new Microsoft.Web.WebView2.WinForms.WebView2();

            var ecwTask = webView21.EnsureCoreWebView2Async(null);
            while (ecwTask.IsCompleted == false)
            {
                Application.DoEvents();
            };

            var scriptText = @"var test = function(){ return 'apple';}; test();";
            var srunTask = webView21.ExecuteScriptAsync(scriptText);
            while (srunTask.IsCompleted == false)
            {
                Application.DoEvents();
            };

            Console.WriteLine(srunTask.Result);
}
}