因此,我已经在控制台应用程序中编写了一段代码,只是使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);
}
}