WebBrowser不触发事件DocumentCompleted

时间:2018-07-20 14:21:50

标签: c# .net

因此,我已经在控制台应用程序中编写了一段代码,只是使System.Windows.Forms的Web浏览器访问了一个网站。现在我面临的问题是,如果我使用现成的WebBrowser,则DocumentCompleted事件不会触发,如您所见,我将一个传递给了构造函数。

我的理想方法是使用通过构造函数传入的WebBrowser,并仅在同一WebBrowser上导航,由于某种原因,当使用同一浏览器时,它不会触发DocumentCompleted事件,这迫使我每次都在新线程中初始化一个新的浏览器。

这是为什么?

这是有效的代码,但每次都必须初始化一个新的浏览器。

public class WebController
{
    private readonly ILogger _logger = new ConsoleLogger(typeof(WebController));

    private WebBrowser _webBrowser;
    private readonly string _webAddress;

    private bool _sendingMessage;
    private string _lastMessage;

    public WebController(WebBrowser webBrowser)
    {
        _webAddress = "https://{username}.example.com/";
    }

    public void SendMessage(string username, string message)
    {
        var thread = new Thread(() =>
        {
            _webBrowser = new WebBrowser();
            _webBrowser.DocumentCompleted += BrowserDocumentCompleted;
            _webBrowser.ScriptErrorsSuppressed = true;
            _webBrowser.Navigate(_webAddress);
            Application.Run();
        });

        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
    }

    private void BrowserDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        if (e.Url.AbsolutePath != (sender as WebBrowser)?.Url.AbsolutePath)
        {
            return;
        }

        _logger.Warn("Navigated to: " + e.Url.AbsoluteUri);
    }
}

0 个答案:

没有答案