#c# #webview2
Вопрос:
string text = "return 'test';";
var webView = new Microsoft.Web.WebView2.WinForms.WebView2();
webView.EnsureCoreWebView2Async(null).RunSynchronously();
var srun = webView.CoreWebView2.ExecuteScriptAsync(text);
Когда я запускаю приведенный выше код, EnsureCoreWebView2Async получает это исключение
«Невозможно изменить режим потока после его установки. (Исключение из HRESULT: 0x80010106 (RPC_E_CHANGED_MODE))» я Что мне нужно сделать, чтобы запустить это без dlg winform в консоли или службе Windows?
Комментарии:
1. Вероятно, ему нужен контекст синхронизации, чтобы он мог захватить контекст выполнения (его планировщик), к которому он может вернуться.
RunSynchronously()
здесь нельзя использовать.
Ответ №1:
Оказывается, главное-это[STAThread] для основной функции.
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);
}
}
Другие предметы, которые, возможно, стоит отметить,
- Иногда вам нужно установить разрядность приложения, потому что использование AnyCPU приведет к бесконечному ожиданию при создании COM-объекта webview2.
- Возможно, вам потребуется установить свойство источника webview2, чтобы привести экземпляр в состояние существования.