将本地 HTML 文件加载到 WebBrowser 控件中会导致循环

本文关键字:控件 循环 WebBrowser HTML 文件 加载 | 更新日期: 2023-09-27 18:34:47

我正在尝试创建自己的Web浏览器,以打开我创建的本地存储的网页。我是用 C# 编写的新手,并且已经让浏览器大部分工作,但我无法打开网页。我尝试了几个不同的命令,并不断得到相同的结果。这是我用来打开文件的命令:

private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
    string curDir = Directory.GetCurrentDirectory();
    var url = new Uri(String.Format("file:///{0}/{1}", curDir, "START_HERE.html"));
    webBrowser1.Navigate(url);
}

浏览器打开没有问题,但页面继续加载并且不会停止。我尝试将代码移动到webBrowser1_Navigating,它会打开 Web 浏览器,但页面显示为空白。该文件设置为作为内容复制到输出目录。

我认为这可能是进度条,并尝试了几种不同的创建方法,但一直得到相同的结果。

这是进度条的代码:

private void webBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
{
    try
    {
        if (e.MaximumProgress != 0)
            ProgressBar1.Value = (int)(((double)e.CurrentProgress * 100) / e.MaximumProgress);
        if (ProgressBar1.Value < 0)
            ProgressBar1.Value = 0;
        else if (ProgressBar1.Value > 100)
            ProgressBar1.Value = 100;    
    }
    catch (Exception ex)
    {           
    }
}

我该怎么做才能修复循环?我知道我错过了一些东西,但不确定是什么。

将本地 HTML 文件加载到 WebBrowser 控件中会导致循环

你的帖子说在哪里

private void webBrowser1_Navigated(...)

您的意思是"导航"而不是"导航"吗?因为如果是这样,则会导致循环在导航内部调用导航。

您必须转到 webBroswer 控件的属性,并删除指向 webBroswer1.Navigate 的事件处理程序。您可能不希望在与导航关联的任何事件处理程序中使用导航命令,因为您可能会遇到不可预测的循环。

将代码放入 webBrowser1.ControlAdded。当生成表单并将 Web 浏览器添加到其父容器时,将调用此函数。它只会被调用一次,并且独立于导航过程。