WinForm程序嵌入Web网页
文章目录
- 前言
- 一、三方库或控件的选择测试
- 二、Microsoft Edge WebView2安装、使用步骤
- 1.安装
- 2.使用
前言
由于此项目需要winform客户端嵌入web网页并于JAVA端交互数据,所以研究了一下嵌入web网页这部分,趟了一遍雷,这里做下记录。
一、三方库或控件的选择测试
1.首先是用了 WebBrowser 控件,发现可以打开部分页面,但是有很多页面打不开,性能相对较弱,支持感觉很拉跨,于是弃用了换其他的。
2.然后用了 Microsoft Edge WebView2 这个做demo测试,兼容性较好,我所需要的页面都可以打开,通过NeGet安装SDK,DLL尺寸较小,对项目安装包大小几乎没有影响。
最后我选择的这个,后续会讲一下安装使用步骤。
3.CefSharp也通过NeGet安装SDK,也可以打开我需要的所有页面,不足的是运行时环境+SDK包比较大,看网络上说此库兼容性、支持性要比 Microsoft Edge WebView2 强大,我没要做更多的测试,感兴趣的可以自己写个demo试试。
二、Microsoft Edge WebView2安装、使用步骤
1.安装
通过NeGet安装SDK,安装后VS2019的winform工具箱中是没有自动出现控件的,(也有幸运的,安装完就有了)

安装完后手动添加控件
点击工具箱空白处鼠标右击,点击选择项

点击浏览找到你上面NeGet安装的Microsoft Edge WebView2 的SDK文件夹,选择红框中的 dll 点击确定就添加上了


添加成功后如下图就可以使用了

2.使用
和平常控件一样拖动使用,设置上你的 url 就可以了

注意:
如果你的 url 通过代码设置,WebView2控件一定不要在设计器里拖动添加,必须去代码里添加WebView2实例化,否则会报错说你还没有初始化控件就是用。
简单代码:
using Microsoft.Web.WebView2.WinForms;private WebView2 webView;//Web
public void WebViewInit()
{this.webView = new WebView2();// 设置 WebView2 的大小和位置webView.Location = new Point(50, 70); // 设置初始位置webView.Size = new Size(1400, 700); // 设置初始大小// 将控件添加到窗体Controls.Add(webView);// 在窗体加载时导航到指定的网页string url = "http://192.168.1.60/?t=" + DateTime.Now.Ticks;// 初始化 WebView2 控件并加载网页InitializeWebView2AndLoadPage(url);
}private async void InitializeWebView2AndLoadPage(string url){// 确保 CoreWebView2 实例已经准备好await webView.EnsureCoreWebView2Async();// 确保在 WebView2 控件初始化完成后加载网页webView.CoreWebView2.Navigate(url);}
相关文章:
WinForm程序嵌入Web网页
文章目录 前言一、三方库或控件的选择测试二、Microsoft Edge WebView2安装、使用步骤1.安装2.使用 前言 由于此项目需要winform客户端嵌入web网页并于JAVA端交互数据,所以研究了一下嵌入web网页这部分,趟了一遍雷,这里做下记录。 一、三方库…...
Redis string类型hash类型
string类型 类型介绍 在Redis中的所有的key都是string类型,而value的类型有多种。 Redis中的字符串是直接按照二进制的方式进行存储的,也就是不会做任何的编码转换,存的是什么,取出来的就是什么。这样一般来说,Redi…...
Solidity智能合约中的异常处理(error、require 和 assert)
Solidity 中的三种抛出异常方法:error、require 和 assert 在 Solidity 开发中,异常处理是确保智能合约安全性和正确性的关键步骤。Solidity 提供了三种主要方法来抛出异常:error、require 和 assert。本文将详细介绍这三种方法的用途、实现方…...
True NAS禁用ipv6
在 TrueNAS Scale 中,禁用 IPv6 的方法如下:12 进入 System->Advanced->Sysctl,设置一个 sysctl 可调整变量 net.ipv6.conf.all.disable_ipv6,值为 1,以完全禁用 IPv6。\...
笔记整理—linux进程部分(2)使用fork创建进程
为什么要创建进程,首先每个程序的运行都需要一个进程;多进程实现宏观上的并行。 fork的原理,是进程的分裂生长模式。如果操作系统需要一个新的进程,那么就会以cp的方法得到一个新的进程,此时老的进程是父进程ÿ…...
在Python中实现多目标优化问题(6)
在Python中实现多目标优化问题 在Python中实现多目标优化,除了传统的进化算法(如NSGA-II、MOEA/D)和一些基于机器学习的方法外,还有一些新的方法和技术。这些新方法通常结合了最新的研究成果,提供了更高效的解决方案。…...
Java EE中的编码问题及解决方案
Java EE中的编码问题及解决方案 在Java EE开发中,处理字符编码是确保数据正确传输和显示的重要环节。不同的编码不一致会导致乱码,影响用户体验。本文将总结在Java EE中可能遇到的编码问题及其解决方案。 1. 输入数据编码问题 在表单提交时,…...
9月27日,每日信息差
第一、中国科学家团队在干细胞治疗领域取得重要突破,通过化学重编程技术成功制备出胰岛细胞,并用于移植治疗一名 1 型糖尿病患者,实现了临床功能性治愈。相关研究成果已发表在国际权威期刊《细胞》上。 第二、交通运输部公路局局长周荣峰在国…...
什么是 Angular 开发中的 Dumb components
Dumb components,在 Angular 开发中也被称为 Presentational components,它们的主要职责是通过展示数据和触发事件,把业务逻辑和 UI 表现分离开来。Dumb components 只通过 Input() 接收数据,Output() 向外发送事件,不…...
Docker 进入容器运行命令的详细指南
Docker 进入容器运行命令的详细指南 Docker 是一个开源的容器化平台,广泛应用于开发和生产环境中。它允许开发者打包应用程序及其依赖项到容器中,并能够在不同的平台上快速部署和运行。容器通常是独立且隔离的,但在开发、调试或维护过程中&a…...
如何禁止非真实用户的ip访问网站服务器
为了禁止非真实用户的IP访问网站服务器,可以采用多种技术手段和策略。以下是一些常用的方法: 1. 使用IP黑名单和白名单 黑名单:定期更新和维护一个IP黑名单,阻止已知的恶意IP地址或数据中心IP访问网站。白名单:对于特…...
探索SpringBoot:学科竞赛管理项目开发
2 相关技术简介 2.1Java技术 Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译,任…...
ultralytics yolo v8 示例:加载官方模型进行推理
Ultralytics YOLO 是计算机视觉和 ML 领域专业人士的高效工具。 安装 ultralytics 库: pip install ultralytics 实现代码如下: import cv2 from ultralytics import YOLO# 加载预训练的 YOLOv8n 模型 ckpt_dir "./ckpt/" # 模型缓存地址…...
【中间件学习】Nginx快速入门(为了配置一个项目)
-----------------------------本文章借鉴遇见狂神说--------------------------- 一、一个产品出现瓶颈?? 在一个产品刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应该就够…...
鸿蒙harmonyos next flutter通信之MethodChannel获取设备信息
本文将通过MethodChannel获取设备信息,以此来演练MethodChannel用法。 建立channel flutter代码: MethodChannel methodChannel MethodChannel("com.xmg.test"); ohos代码: private channel: MethodChannel | null nullthis.c…...
【笔记】原子结构的近代理论
近代原子结构理论的建立是从氢原子光谱得到启示的。 一、氢原子光谱与波尔理论 1.氢原子光谱 在装有两个电极的真空玻璃管内通入极少量高纯氢气,通高压电使之放电,管中发出的光束通过分光棱镜,得到分立的谱线,称为线状光谱。 发…...
【python】循环中断:break 和 continue
目录: while 循环的基础语法while 循环的基础案例while 循环的嵌套应用while 循环的嵌套案例for 循环的基础语法for 循环的嵌套应用循环中断:break 和 continue综合案例 学习目标: 掌握使用 continue 和 break 关键字控制循环 思考&#…...
WIFI密码默认显示
文章目录 需求分析遇到问题问题原因解决方案 需求 在进入设置,点击某一个wifi,连接wifi 界面,显示密码默认选中状态,效果如下 分析 在 WiFi密码被输入法挡住 中我们已经分析了整个流程,布局文件和控制中心。 结局系统设置WIFI连…...
Emiya 家今天的饭C++
题目: 样例解释: 【样例 1 解释】 由于在这个样例中,对于每组 i,j,Emiya 都最多只会做一道菜,因此我们直接通过给出烹饪方法、主要食材的编号来描述一道菜。 符合要求的方案包括: 做一道用烹饪方法 1、主要…...
Mybatis缓存机制(图文并茂!)
目录 一级缓存 需求我们在一个测试中通过ID两次查询Monster表中的信息。 二级缓存 案例分许(和上述一样的需求) EhCache第三方缓存 在了解缓存机制之前,我们要先了解什么是缓存: 缓存是一种高速存储器,用于暂时存储访问频繁的数据&…...
百川2-13B-4bits+OpenClaw组合优化:5招降低Token消耗
百川2-13B-4bitsOpenClaw组合优化:5招降低Token消耗 1. 为什么需要关注Token消耗? 当我第一次将百川2-13B-4bits模型与OpenClaw对接时,就被Token消耗的速度震惊了。一个简单的文件整理任务,前后不到10分钟的操作,竟然…...
ChatGPT响应延迟优化实战:从架构设计到性能调优
ChatGPT响应延迟优化实战:从架构设计到性能调优 最近在项目里深度集成了ChatGPT的API,发现不少同事都在吐槽:“这玩意儿怎么老是卡卡的?” 尤其是在处理长文本、多轮对话或者高并发请求时,响应延迟的问题尤为突出。作…...
俄罗斯莫斯科电子烟展:跟团公司高性价比选择策略拆解
对于想开拓俄罗斯市场的电子烟企业来说,俄罗斯莫斯科电子烟展是不可错过的出海窗口,但行业信息杂乱、代理鱼龙混杂的现状,让很多企业陷入“选便宜还是选靠谱”的两难。选对跟团公司,不仅能节省成本,更能直接决定参展效…...
开源项目依赖管理:从冲突解决到高效协作的实践指南
开源项目依赖管理:从冲突解决到高效协作的实践指南 【免费下载链接】IPED IPED Digital Forensic Tool. It is an open source software that can be used to process and analyze digital evidence, often seized at crime scenes by law enforcement or in a corp…...
开端支路分布因子原理推导及Matlab程序编写
开端支路分布因子原理推导及matlab程序编写电力系统老司机都懂,支路开断后潮流重新分布的骚操作得靠分布因子。这玩意儿本质上是个灵敏度系数,说白了就是某条线路断了之后,其他线路得帮它扛多少锅。今天咱们直接上手推导,顺手撸个…...
利用快马平台十分钟搭建tk风格免费登录入口网站原型
今天想和大家分享一个快速搭建登录页面的小技巧。最近在做一个新项目,需要先验证登录功能的可行性,但时间比较紧,不想花太多时间在前端页面上。正好发现了InsCode(快马)平台,用它十分钟就搞定了一个tk风格的登录入口原型ÿ…...
避坑指南:Python 3.9与Transformers 3.0不兼容?手把手解决BERT环境搭建中的版本冲突
深度解析Python与Transformers版本冲突:从报错到BERT环境完美搭建 当你在深夜调试代码时,突然遭遇"module signal has no attribute SIGKILL"的红色报错——这可能是Python 3.9与Transformers 3.0不兼容的典型症状。本文将带你深入理解版本冲突…...
手把手教你用BurpSuite抓取火狐浏览器数据包(含代理设置完整流程)
从零掌握BurpSuite抓包:火狐浏览器配置与实战技巧 在Web安全测试领域,BurpSuite无疑是渗透测试工程师和开发者的瑞士军刀。不同于简单的网络调试工具,它提供了从基础抓包到高级漏洞探测的全套解决方案。本文将带你从环境搭建到实战抓包&#…...
FreeSWITCH mod_vad模块实战:手把手教你用Python ESL实现通话静音检测与智能录音
FreeSWITCH mod_vad模块实战:Python ESL实现智能语音检测与动态录音控制 在语音通信系统中,精准识别通话双方的语音活动状态是实现智能交互的基础能力。传统录音方案往往采用全程录制模式,不仅浪费存储资源,后期分析时还需要人工筛…...
htcw_esp_panel:ESP32嵌入式显示与触摸的编译期硬件抽象框架
1. htcw_esp_panel:面向嵌入式显示与人机交互的全栈式硬件抽象层htcw_esp_panel 是一个专为 ESP32 系列 SoC(包括 ESP32-S2/S3/C3/P4)设计的轻量级、可配置化硬件抽象库。它并非简单的驱动封装,而是一套覆盖显示、触摸、按键、SD …...
