0

我想使用多个 Awesomium 实例(实际上没有显示/打印它们)同时访问某些网站,但不知道从哪里开始。我用 WebBrowser 控件做了这个,但结果证明这是一个非常糟糕的主意,我决定改用 Awesomium。

先感谢您!

我将添加一些示例代码,希望它能显示我真正需要的内容:

for (int i = 0; i < 3; i++)
{
    var th = new Thread(() =>
    {
        //Create new view/control/instance here
    });
    th.Start();
 }

我试图在那里创建 WebView,但出现内存损坏错误。

4

3 回答 3

0

@user1410644 Awesomium 不支持文档中所述的多线程 .. 初始化后,您可以创建多个 webviews,它们将完成这项工作并且可以工作

然后开始 for 循环

            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();

我认为这样的事情可以解决问题

于 2014-09-27T22:27:39.307 回答
0

尝试这样的事情:

        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();
    }
于 2013-04-14T17:26:40.417 回答
0

据我所知,Awesomium 不支持多线程,所以报错是正常的。您可以在同一线程上创建多个 Awesomiums 组件 WebControl(最简单的是 UI 线程 - 否则您需要自己提供“屏幕”刷新代码)。

于 2013-03-30T13:41:57.423 回答