C#使用 WebView2 替代 Electron/Tauri 之 Web 核心

作者&投稿:友胥 (若有异议请与网页底部的电邮联系)
~ 上一次试验了C#使用WebView2替代Electron。

C# .NET为Web项目(如MVC、RazorPage、Blazor等)添加系统托盘图标,替代Winform、WPF、Electron、QT、WebView2、Tauri等桌面程序。

这次我们将通过web来为WebView2提供数据。

虽然可以使用其他语言,通过WebView2提供的传输字符串接口进行JS通讯,但这比较麻烦,需要自己复制一套算法和架构。

C# Winform拿来就用,非常方便。

实现起来既简单,又可以复用Winform和Web API生态,真是一举多得。

Github:github.com/xxxxue/Webvi...

创建项目

创建一个.Net的Winform项目(本文使用.net 8)

nuget安装WebView2

目录结构

代码

Winform项目中想使用asp net core,需要修改项目文件

Sdk= Microsoft.NET.Sdk.Web (可以让Winform项目使用web相关的.NET库)

OutputType = WinExe (可以让exe启动后没有控制台窗口,只显示Winform窗口)

TargetFramework需要指定windows,因为Winform只能在win上运行

ReactRoot = my-react-app/ (自定义变量,稍后会用到)

手动创建一个wwwroot的目录

Program.cs

启动一个web api,并监听localhost:5000

Form1窗口拖入WebView2控件,然后在窗口Load事件中指定WebView2的请求地址

这里的3000是前端React项目的地址(稍后创建)

开发环境使用vscode运行前端项目,热更新等等全都有了。

(前后端分离开发,唯一的区别就是不用自己打开浏览器了,直接用Winform就可以)

5000是上面代码中指定的web api的地址

因为MsBuild构建Release会把前端编译后的文件放到wwwroot里(稍后去做)

所以这里直接调用5000端口就可以了。

Controller

创建一个MyController.cs

继承ControllerBase,直接开始写方法

创建前端项目

用你喜欢的方式创建一个前端项目

这里用React举例

pnpm create vite

项目名my-react-app

选择react, typescript

在scripts的dev命令指定端口号3000

"dev": "vite --port 3000"

将测试代码写到App.tsx中

核心代码是button点击后,发送http请求

发布时把前端产物放入wwwroot

这样非debug模式下就会编译前端(pnpm build)

复制前端dist目录到wwwroot

发布项目,勾选上单文件与删除现有文件

可以看到在编译完C#后,开始编译前端了。

最后会把所有的产物都输出到publish中

直接双击exe

点击按钮测试一下

发布后,压缩包400Kb,解压出来1M

图中Webview2Demo.exe.WebView2文件夹,是运行后WebView2生成的本机缓存

打包发给别人时,不需要这个文件夹

(可选)将前端文件嵌入到dll中

安装nuget包Microsoft.Extensions.FileProviders.Embedded

这里用一个名为"static"的新目录举例。如果想与之前的操作配合,改成wwwroot就可以了。


万宁市15866428684: c# 窗口 新窗口替代原窗口 -
云将紫竹: 你需要使用3个form 第一个form你将设置为容器窗体.第二个form可以是你的form1.第三个form就是form1上点击button然后打开form2最后关闭form1.如还有疑问继续提. 贴个代码:public Form1() { InitializeComponent(); this.IsMdiContainer = ...

万宁市15866428684: c#和Java有什么区别 -
云将紫竹: 1、开发环境.C#用Visual Studio,而JAVA用MyEclipse;跨平台Java用虚拟机,C#用Framework;Java所有平台都支持,而C#只有Windows和Linux支持. 很多网友认为C#语言比Java更先进,如在泛型和linq上,这只能说C#编程体验好.Sun...

万宁市15866428684: 操作系统中未安装webview2 -
云将紫竹: 操作系统中未安装webview2:1:打开软件2:编辑所需要的信息3:然后编辑好了之后确认,点击右上角的设置中心4:在设置中心里面找到信息就可以了

万宁市15866428684: C#在窗体间传递参数的几种常用办法 -
云将紫竹: 窗体程序么?如果是窗体的话知道的有3种1、通过窗体的构造函数传值,new Form(参数1.....)2、窗体中声明属性,赋值传递3、通过委托传值,可以通过事件触发传递例如窗体1更改了一个价...

万宁市15866428684: Microsoft Edge WebView2 Runtime有什么用 -
云将紫竹: Microsoft Edge WebView2 Runtime是一个运行时,可以在Windows 10操作系统上使用Microsoft Edge浏览器的内核作为基础来创建和嵌入网页浏览体验的库.它是由Microsoft开发的,旨在替代旧版的WebView控件,并提供更多的功能和性能....

万宁市15866428684: android里如何调用Js里的函数 -
云将紫竹: 思路:1、需要使用webview打开网页2、设置webview支持脚本3、然后通过webview的loadUrl方式进行js函数调用 代码:webview.getSettings().setJavaScriptEnabled(true); webview.addJavascriptInterface(object,"name");//把Name="name...

万宁市15866428684: C#能否使用WebBrowser控件,在提交表单后获取HttpWebRequest. -
云将紫竹: 不可以.或者说很难.WebBrowser 已经是封装的很彻底的控件了,和 HttpWebRequest 是两个东西.硬要获取就得像 fiddler2 一样,挂载系统钩子(光这点 C# 自己就做不到,得用 C/C++),监视所有向外发的请求,如果句柄来源于你的 Form,就解析这个包得到 HttpWebRequest.

万宁市15866428684: C# 中怎么应用JSON来替代之前的webservice?? -
云将紫竹: 如果要学习JSON,先要懂JAVASCRIPT和AJAX. 至于C# 中怎么应用JSON,说白了就是利用C#构造一个符合JSON格式的字符串再传到客户端,客户端通过使用JAVASCRIPT对JSON进行解析.如接收js变量为 var str; var nowStr=eval("("+str+")"); 这样就可以引用nowStr这个js对象了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网