2017-06-29 72 views
0

我做了這個小碼: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.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"); 
} 

嘗試做一些多線程與不同的網絡訪問量在同一時間做同樣的東西。

我每次按一次按鈕,它工作正常,並表明我「DocumentReady」在控制檯,但是當我按下它一次,它給了我這個錯誤:

System.InvalidOperationException: 'The WebCore is already initialized.' 

這讓很多的因爲我之前已經初始化過一次,但有沒有辦法多次運行這個腳本?

+0

您每次單擊按鈕時初始化「WebCore」。確保只初始化一次。例如在應用程序啓動或其他。或者你可以記得如果你之前用一個標誌初始化WebCore。 –

+0

那麼,我必須在webview和其他Awesomium的東西的同一個線程中初始化webcore。 – Samhakadas

+0

我看到awesomium似乎不是線程安全,看起來過時了。爲什麼不使用原生的'WebClient'或類似'ChromiumFX'? –

回答

0

awesomium只需要在一個線程中運行。這沒有解決方法。你不能從不同的線程啓動多個實例。雖然所有的導航都會發生在不同的獨立進程中,但事件將在主線程中被引用(如果你使用winforms,它必須是gui線程)

如果你想使用webclient的會話(cookie),你可以使用單獨的CookieContainer會話

+0

好的,你知道任何其他Awesomium的選擇嗎?多線程和多會話? – Samhakadas

+0

我認爲所有的都需要同樣的東西 – TakeMeAsAGuest