WebBrowser 导航功能不起作用并且未调用处理程序

2023-11-30

代码如下。

我正在尝试导航到网站并阅读信息,问题是导航不起作用,唯一被调用的事件是导航并且打印的 Url 为空,其他事件从未被调用。 我缺少什么?我必须使用 Form 类才能导航吗?我不能从控制台应用程序以编程方式使用它吗?

请帮忙。

class WebNavigator
{
    private readonly WebBrowser webBrowser;

    public WebNavigator()
    {
        webBrowser = new WebBrowser
        {
            AllowNavigation = true
        };

        webBrowser.Navigated += webBrowser_Navigated;
        webBrowser.Navigating += webBrowser_Navigating;
        webBrowser.DocumentCompleted += webBrowser_DocumentCompleted;
    }

    // Navigates to the given URL if it is valid. 
    public void Navigate(string address)
    {
        if (String.IsNullOrEmpty(address)) return;
        if (address.Equals("about:blank")) return;
        if (!address.StartsWith("http://") &&
            !address.StartsWith("https://"))
        {
            address = "http://" + address;
        }
        try
        {
            Trace.TraceInformation("Navigate to {0}", address);
            webBrowser.Navigate(new Uri(address));
        }
        catch (System.UriFormatException)
        {
            Trace.TraceError("Error");
            return;
        }
    }

    // Occurs when the WebBrowser control has navigated to a new document and has begun loading it.
    private void webBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
    {
        Trace.TraceInformation("Navigated to {0}", webBrowser.Url);
    }

    // Occurs before the WebBrowser control navigates to a new document.
    private void webBrowser_Navigating(object sender, WebBrowserNavigatingEventArgs e)
    {
        Trace.TraceInformation("Navigating to {0}", webBrowser.Url);
    }

    private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        var wb = sender as WebBrowser;
        Trace.TraceInformation("DocumentCompleted {0}", wb.Url);
    }
}

我会利用等待/异步.

Usage:

static async void  DoWork()
{
    var html = await GetHtmlAsync("http://www.google.com/");
}

实用方法

static Task<string> GetHtmlAsync(string url)
{
    var tcs = new TaskCompletionSource<string>();

    var thread = new Thread(() =>
    {
        WebBrowser wb = new WebBrowser();

        WebBrowserDocumentCompletedEventHandler documentCompleted = null;
        documentCompleted = async (o, s) =>
        {
            wb.DocumentCompleted -= documentCompleted;
            await Task.Delay(2000); //Run JS a few seconds more

            tcs.TrySetResult(wb.DocumentText);
            wb.Dispose();
            Application.ExitThread();
        };

        wb.ScriptErrorsSuppressed = true;
        wb.DocumentCompleted += documentCompleted;
        wb.Navigate(url);
        Application.Run();
    });

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

    return tcs.Task;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebBrowser 导航功能不起作用并且未调用处理程序 的相关文章

  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 索尼智能手表上的 XML 布局

    我在 128x128 智能手表屏幕上获得正确的布局时遇到问题 这是一个有趣的问题 因为手表上的布局显然继承了其运行设备的屏幕密度 因此 当在平板电脑和手机上运行时 手表上的布局元素的大小完全不同 我的布局基于智能扩展 SDK 中的示例项目之
  • 在 PHP 中将图像分辨率从 72 dpi 更改为 25 dpi

    我想使用 PHP 将图像的分辨率从 72 dpi 更改为 25 dpi 是否可以 Regards 萨利尔 盖克瓦德 这是不可能的 至少对于 PHP GD 不确定 ImageMagick 对不起 不过你可以尝试模仿它 假设你想创建一个 400
  • 通过ajax调用更新选择字段时未选择Select2

    我在使用时遇到问题select2选择选项中的类 当我使用字段插入表单数据时select2通过ajax调用类然后它就可以正常工作 但是当我更新的时候select2首先通过 ajax 调用相同表单的字段 它不是我首先插入的选定值 Note aj
  • 在从不同计算机编译的旧 APK 上安装新 APK

    我有一个 Delphi 应用程序 不在 Play 商店中 它已经发布了一段时间 最初是用 Delphi 10 3 编写的 我现在已经更换了计算机并升级到了 Delphi 11 1 以及更高的 Android SDK 当我尝试在已有 APK
  • 引导后访问 Zend 应用程序 Bootstrap _init 函数

    我为并行任务编写了一个基于 Zend Framework 的 cron 服务 并且子线程与父线程共享资源时遇到问题 我解决了数据库连接问题 但我现在看到定期出现的问题Zend Db Table Abstract无法将表元数据保存到元数据缓存
  • GWT + GAE python:COMET 和 RPC 框架

    假设我想在客户端使用 Google GWT 在服务器端使用 Google AppEngine Python 此外 我希望能够使用 RPC 调用服务器以及执行基于 COMET 的交换 就现有框架而言 我有哪些选择 我通过谷歌搜索 gwt py
  • 无法在 Windows 7 下的旧版本 Visual Studio (2003) 上启动调试器

    对于这个项目 我需要在我的服务器上使用 IIS 6 0 和 Framework 1 1 在 Windows 7 上安装和运行 VS 2003 因为远程服务器上有旧的 VS2003 C 代码需要更新 并且没有安装 VS 2003 仅安装了 D
  • 将临时 istringstream 对象传递给 istream_iterator

    我对以下标记字符串的代码有疑问 用空格分隔标记 include
  • 需要工具来格式化html(缩进,添加空格)

    我正在开发一个生成 html 的 net 项目 生成 html 字符串时 没有空格或缩进 这使得理解生成的 html 变得困难 有没有一个工具可以获取我生成的 html 字符串并对其进行格式化 使其看起来不错 如果您自己生成 HTML 它应
  • JOptionPane 标题栏图标

    我想替换 JOptionPane 标题栏中的图标 因为它当前显示默认的 Java 咖啡徽标 我尝试了以下方法 JOptionPane showMessageDialog null Some Text Login JOptionPane IN
  • Visual Basic 命令行编译器已停止工作

    昨天 我可以毫无问题地使用 Visual Studio 2010 然而 今天当我打开计算机并尝试再次在VS2010上打开我的项目 带有Visual Basic NET的Web应用程序 时 我收到一个消息框 如下所示 后来 我在尝试删除 su
  • iOS - 将时间和日期转换为用户时区

    我正在网络服务器上发送一些请求 该服务器会回复我时间和日期 如下所示 at 18 58 of 05 08 2012 我可以弄清楚如何获取 2 个 NSStrings 18 58 05 08 2012 中的时间和日期 请注意 服务器的时区是
  • 动态加载现有组件 Angular 2 Final Release

    我正在尝试在最终版本 2 0 0 中动态加载组件 使用 RC5 我使用以下代码进行加载 创建一个指令来加载控件 import CheckboxComponent CheckboxListComponent DatePickerCompone
  • 在没有 Date 对象的情况下在 Javascript 中操作日期

    看来我无法使用 javascript Date 对象 因为当您使用日期字符串初始化时 它本质上默认为美国日期 无法将任何文化信息传递给日期对象 IE 无论客户端的区域设置是什么 如果客户端区域设置是英国 var d new Date 08
  • 在 Chrome 中加载页面时,如何捕获所有网络请求和完整响应数据?

    使用 Puppeteer 我想在 Chrome 中加载 URL 并捕获以下信息 请求网址 请求标头 请求发布数据 响应标头文本 包括重复的标头 例如set cookie 传输的响应大小 即压缩大小 完整响应体 捕获完整的响应主体是给我带来问
  • 支持 O(1) 随机访问和最坏情况 O(1) 附加的数据结构?

    我实现了一个可调整大小的索引集合 它使用数组来存储其元素 例如List
  • 在 Windows Powershell 中复制文件夹时出现意外结构

    我有一组项目 其中包含项目特定文件和通用文件的混合 我正在尝试将两个不同文件夹 一个特定于项目的文件夹和一个公共文件夹 中的内容复制到以该项目命名的单个文件夹中 我还想保留原始文件夹中的所有文件夹层次结构 例如一些常用文件的路径 src C
  • 使用非托管磁盘创建 Azure VM

    我试图通过 PowerShell 创建具有非托管磁盘的 Azure VM因为 Azure 政府尚不支持托管磁盘 没有任何一个文档我可以找到 PowerShell VM 创建引用托管或非托管磁盘 默认值似乎是托管磁盘 我的 VM 创建失败并出
  • 基于监视器宽度的元素大小

    我正在创建自己的个人网站 以测试我迄今为止在 HTML 和 JavaScript 方面所学到的知识 我制作了工具栏 它在宽度相当大的显示器上看起来很漂亮 我将工具栏内容放在中间 我尝试在较小的显示器上访问它 工具栏中的元素相互重叠 因为我根
  • WebBrowser 导航功能不起作用并且未调用处理程序

    代码如下 我正在尝试导航到网站并阅读信息 问题是导航不起作用 唯一被调用的事件是导航并且打印的 Url 为空 其他事件从未被调用 我缺少什么 我必须使用 Form 类才能导航吗 我不能从控制台应用程序以编程方式使用它吗 请帮忙 class