您需要在 WinForms 应用程序中显示网页吗?您可以使用浏览器控件来实现。目前,您有多种免费和商业控件可供选择。不同的控件在功能和适用场景上各有侧重。

在这篇博文中,我们将介绍如何使用 DotNetBrowser——一个基于 Chromium 的浏览器控件,适用于对软件和供应商有高标准要求的关键业务场景。

如果您正在考虑在 WinForms 应用程序中使用 WebView2 或 CefSharp,建议阅读以下对比文章:

何时选择 DotNetBrowser 

DotNetBrowser 是一款商业软件,专为满足企业应用场景而设计。除了库本身,客户还能获得保密技术支持,响应时间仅一个工作日。

如果您的项目有以下需求,建议选择 DotNetBrowser:

  • 易于使用的库;
  • 及时的漏洞修复;
  • 技术支持与协助;
  • Chromium 的特定功能,如扩展程序、打印 API、屏幕共享、专有音频和视频编解码器等。

安装依赖项 

DotNetBrowser 以一组 DLL 文件的形式提供,并可在 NuGet 上获取。

选择 “nuget.org” 作为包源,搜索 DotNetBrowser.WinForms,然后点击 “Install” 按钮进行安装。

DotNetBrowser 的 NuGet 包列表

NuGet 中的 DotNetBrowser 包。

在 WinForms 应用程序中添加浏览器控件 

要将 DotNetBrowser 控件添加到 WinForms 应用程序中,可参考以下代码片段:

using System.Windows.Forms;
using DotNetBrowser.Browser;
using DotNetBrowser.Engine;
using DotNetBrowser.WinForms;

namespace Embedding.WinForms
{
    public partial class WebViewForm : Form
    {
        private const string Url = "https://teamdev.com/dotnetbrowser";
        private readonly IBrowser browser;
        private readonly IEngine engine;

        public WebViewForm()
        {
            InitializeComponent();

            engine = EngineFactory.Create(RenderingMode.HardwareAccelerated);
            browser = engine.CreateBrowser();
            browser.Navigation.LoadUrl(Url);
            FormClosed += WebViewForm_FormClosed;

            BrowserView browserView = new BrowserView
            {
                Dock = DockStyle.Fill
            };
            Controls.Add(browserView);
            browserView.InitializeFrom(browser);
        }

        private void WebViewForm_FormClosed(object s, FormClosedEventArgs e)
        {
            browser?.Dispose();
            engine?.Dispose();
        }
    }
}

运行后的效果如下:

带有 DotNetBrowser 控件的 WinForms 应用程序

带有 DotNetBrowser 控件的 WinForms 应用程序。

在上述代码片段中,我们一次性创建了三个对象:IEngine、IBrowser 和 BrowserView。下面为您详细解释它们的作用。

DotNetBrowser 为您提供对底层浏览器 Engine 的精细化控制,并提供了相应的抽象层次结构。

DotNetBrowser 的架构

DotNetBrowser 的架构。

IEngine 负责启动主 Chromium 进程。如果需要创建多个相互完全隔离的浏览器实例,您可以创建多个 Engine 实例。

创建 Engine 需要一些时间,因为它会启动 Chromium 进程。您可以在任何线程上创建 IEngine,但调用线程会一直等待,直到 Chromium 启动完成。如果在 UI 线程中调用 EngineFactory.Create,窗体在此期间将无法响应。为避免这种情况,请使用 EngineFactory.CreateAsync。在这篇博文中,我们使用同步方法只是为了简化代码。

每个 Engine 都包含一个或多个 IProfile,允许通过将浏览器数据和设置分开来隔离同一 Engine 内的浏览器。您可以管理缓存、代理、网络、下载、权限和配置文件级别的其他功能。

在 IProfile 内,您可以创建多个 IBrowser 实例。IBrowser 与 Chromium 中的浏览器标签页最为相似。这些实例可用作功能齐全的浏览器,允许您加载网页、模拟鼠标和键盘输入、打开开发者工具等功能。

最后,BrowserView 负责在 UI 中显示浏览器内容。与 IBrowser 不同,它是一个独立的控件,即使不可见时,仍然可以在后台继续渲染。

结论 

本文介绍了如何在 WinForms 中使用 DotNetBrowser,这是一款基于 Chromium 的浏览器控件,专为有重要应用场景、需要技术支持、自定义功能或高级功能(如 Chrome 扩展程序、打印 API )的企业设计。

Spinner

发送中。。。

抱歉,发送中断

请再次尝试,如果问题仍然存在,请联系我们 info@teamdev.com.

阅读并同意条款以继续。

您的个人 DotNetBrowser 试用密钥和快速入门指南将在几分钟内发送至您的电子邮箱。