[英]C# and Awesomium - multi-threading
我想使用Awesomium的多個實例(不強制顯示/打印它們)同時訪問某些網站,但不知道從哪里開始。 我已經使用WebBrowser控件做到了這一點,但事實證明這是一個非常糟糕的主意,因此我決定切換到Awesomium。
先感謝您!
我將添加一些示例代碼,希望它將顯示我真正需要的:
for (int i = 0; i < 3; i++)
{
var th = new Thread(() =>
{
//Create new view/control/instance here
});
th.Start();
}
我嘗試在此處創建WebView,但出現內存損壞錯誤。
據我所知,Awesomium不支持多個線程,因此出現錯誤是正常的。 您可以在同一線程上創建多個Awesomiums組件WebControl(最簡單的一個是UI線程-否則,您需要自己提供“屏幕”刷新代碼)。
嘗試這樣的事情:
private void newbrowser()
{
Awesomium.Windows.Forms.WebControl browser =
new Awesomium.Windows.Forms.WebControl();
browser = new Awesomium.Windows.Forms.WebControl();
browser.Paint += browser_Paint;
browser.Location = new System.Drawing.Point(1, 1);
browser.Name = "webControl";
browser.Size = new System.Drawing.Size(1024, 768);
browser.Source = new System.Uri("http://checkip.dyndns.com/", System.UriKind.Absolute);
browser.TabIndex = 0;
}
接着
private void button1_Click(object sender, EventArgs e)
{
System.Threading.Thread newThread;
newThread = new System.Threading.Thread(newbrowser);
newThread.Start();
}
@ user1410644 Awesomium不支持文檔中所述的多個線程..初始化后,您可以創建多個webview,它們將完成工作並將起作用
然后開始循環
WebSession session = WebCore.CreateWebSession(folder + "\\b" + i, prefs);
WebView view = WebCore.CreateWebView(1920, 1080, session, WebViewType.Offscreen);
view.LoadingFrameComplete += (se, ev) =>
{
if (ev.IsMainFrame)
{
var bitmapSurface = (BitmapSurface)((WebView)se).Surface;
var writeableBitmap = new WriteableBitmap(((WebView)se).Width, ((WebView)se).Height, 96, 96, PixelFormats.Bgra32, null);
writeableBitmap.Lock();
bitmapSurface.CopyTo(writeableBitmap.BackBuffer, bitmapSurface.RowSpan, 4, false, false);
writeableBitmap.AddDirtyRect(new Int32Rect(0, 0, ((WebView)se).Width, ((WebView)se).Height));
writeableBitmap.Unlock();
var image = new Image();
image.Source = writeableBitmap;
screenShot.Source = writeableBitmap;
}
};
view.Source = "http://www.google.com".ToUri();
這樣的事情可以解決我的問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.