加载多个URL时,会调用FinishLoadingFrameEvent事件一次

时间:2017-09-28 07:06:24

标签: c# dotnetbrowser

我在for循环中有一个url列表,一次加载一个url但是只调用一次FinishLoadingFrameEvent事件。

我的完整代码就像这样

<div class="svg-container">
    <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="644px" height="474px" viewBox="0 0 644 474" style="enable-background:new 0 0 644 474;" xml:space="preserve">
        <style type="text/css">
        .st0 {fill: #22B573;stroke: #000000;stroke-width: 23;stroke-miterlimit: 10;}            
        .st1 {fill: #39B54A;stroke: #000000;stroke-width: 6;stroke-miterlimit: 10;}            
        .st2 {fill: #00723D;stroke: #000000;stroke-width: 6;stroke-miterlimit: 10;}
        </style>
        <circle class="st2" cx="381.307" cy="280.325" r="135.276" />
        <circle class="st1" cx="381.307" cy="280.325" r="112.99" />
        <circle class="st0" cx="381.307" cy="280.325" r="67.177" />
    </svg>
</div>

我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

您的代码似乎与我的网址集一样正常工作。

以下是包含所有修改的完整示例代码:

public partial class MainWindow : Window
{
    private List<string> urls = new List<string>
        { "google.com", "microsoft.com", "teamdev.com", "teamdev.com/dotnetbrowser" };
    ManualResetEvent waitEvent = new ManualResetEvent(false);
    BrowserView webView = new WPFBrowserView();
    string path = "html.txt";

    public MainWindow()
    {
        InitializeComponent();

        mainLayout.Children.Add((UIElement)webView.GetComponent());


        webView.Browser.FinishLoadingFrameEvent += delegate (object sender, 
            FinishLoadingEventArgs e)
        {
            //System.Threading.Thread.Sleep(5000);

            if (e.IsMainFrame)
            {
                DOMDocument document = e.Browser.GetDocument();
                var html = document.DocumentElement.InnerHTML;

                System.IO.File.WriteAllText(path, html);
                waitEvent.Set();
            }
        };

        foreach (var url in urls)
        {
            Debug.WriteLine($"Loading {url}");
            webView.Browser.LoadURL(url);
            waitEvent.WaitOne();
            Debug.WriteLine($"{url} loaded");
            waitEvent.Reset();
        }
    }
}

您可以注意到我在事件处理程序中注释了Thread.Sleep调用。取消注释它只会使一切运行得慢得多,但它仍然有效。