我在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>
我错过了什么吗?
答案 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
调用。取消注释它只会使一切运行得慢得多,但它仍然有效。