2013-03-29 46 views
0

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

预先感谢您!

我会添加一些示例代码,希望它会告诉我究竟需要:

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

我一直在努力,有创造的WebView,但我得到的内存损坏错误。

+0

你尝试过什么,因为它代表你没有真正提供细节您的问题大多只是概括性。 – Greg

+0

对不起,但没有具体的细节。我只是不知道从哪里开始。我试图找到文件中的东西,但我没有。我只需要知道从哪里开始,例如什么... – user1410644

回答

0

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

+0

他们会同时运行,我怎么能做到这一点? – user1410644

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

@ user1410644 在文件告诉Awesomium不支持多线程.. 初始化后,您可以创建多个网页视图他们会做这项工作,并将工作

开始循环然后

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

财产以后这样做的伎俩,我认为