C# 多线程错误
我做了一个小代码:C# 多线程错误,c#,multithreading,visual-studio,webview,awesomium,C#,Multithreading,Visual Studio,Webview,Awesomium,我做了一个小代码: private void button1_Click(object sender, EventArgs e) { Task t = new Task(() => { tt += "a"; WebCore.Initialize(new WebConfig(), true); WebView browser = WebCore.CreateWebView(1024, 768, WebViewType.Offsc
private void button1_Click(object sender, EventArgs e)
{
Task t = new Task(() =>
{
tt += "a";
WebCore.Initialize(new WebConfig(), true);
WebView browser = WebCore.CreateWebView(1024, 768, WebViewType.Offscreen);
browser.DocumentReady += browser_DocumentReady;
browser.Source = new Uri("https://www.google.com/");
WebCore.Run();
});
t.Start();
Console.ReadLine();
}
static void browser_DocumentReady(object sender, UrlEventArgs e)
{
Console.WriteLine("DocumentReady");
}
尝试使用不同的web视图同时执行相同的任务来执行多线程
每次我按下按钮时,它工作正常并在控制台中显示“DocumentReady”(文档准备就绪),但当我再次按下按钮时,它会显示以下错误:
System.InvalidOperationException: 'The WebCore is already initialized.'
这很有意义,因为我以前已经初始化过一次,但是有没有办法多次运行此脚本?awesomium只需要在一个线程中运行。这方面没有解决办法。不能从不同的线程启动多个实例。虽然所有导航都将在不同的独立进程中进行,但事件将在主线程中进行探测(仅供参考,如果您使用winforms,它必须是gui线程)
如果您想要webclient会话(Cookie),每次单击按钮时,您都可以对正在初始化的每个会话使用单独的CookieContainer。确保只初始化ist一次。例如在应用程序启动或其他方面。或者你还记得之前是否用标志初始化过WebCore。好吧,我必须在webview和其他Awesomium东西的同一线程中初始化WebCore。我发现Awesomium似乎不是线程安全的,看起来过时了。为什么不使用本机的
WebClient
或类似的ChromiumFX
?好吧,WebClient不支持多个会话,所以每个webview都有不同的cookie和会话,我不知道ChromiumFX支持多个会话吗?好的,你知道其他的Awesomium替代方案吗?使用多线程和多会话?我认为所有这些都需要相同的东西