0. 前言
由于项目需要,众所周知,PC端软件的界面UI令人堪忧。之前使用过Qt,C#都不尽人意。而且对应的界面库也不多,很多还是收费的。
有没有一种可能,就是基于Web的开源生态,开发一些桌面工作呢,目前有Electron,这个用的人比较多。这个有个缺点就是,如果涉及到与硬件或操作系统之类进行交互的时候,就没有C#或者QT那样方便。特别是调用动态库之类的。
C#通过CefSharp,引入一个Chrome内核,使其能使用Web来画界面,然后用C#来实现对应的功能。
1. 新建C#(.Net)项目
目标框架选择.net framework 4.6
2. 通过Nuget应用CefSharp
目标平台要进行选择,不能是any cpu
安装以下必要的依赖包
拖动一个Web控件到界面上
3. 编写代码,加载Html文件
1 using CefSharp; 2 using CefSharp.WinForms; 3 using System; 4 using System.Collections.Generic; 5 using System.ComponentModel; 6 using System.Data; 7 using System.Drawing; 8 using System.Linq; 9 using System.Text; 10 using System.Windows.Forms; 11 12 namespace CefTools 13 { 14 public partial class Form : System.Windows.Forms.Form 15 { 16 public Form() 17 { 18 InitializeComponent(); 19 20 //访问连接不安全网页时不显示的问题 21 var setting = new CefSettings(); 22 setting.CefCommandLineArgs.Add("--ignore-urlfetcher-cert-requests", "1"); 23 setting.CefCommandLineArgs.Add("--ignore-certificate-errors", "1"); 24 //setting.LogSeverity = LogSeverity.Disable; 25 Cef.Initialize(setting); 26 27 BrowserSettings bsetting = new BrowserSettings(); 28 web.BrowserSettings = bsetting; 29 30 this.web.AllowDrop = false; 31 this.web.Dock = DockStyle.Fill; 32 33 this.web.LoadUrl("file:///./test/test.html"); 34 35 //JS调用C# 36 web.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true; //启用运行JS调用C#代码 37 CefSharpSettings.WcfEnabled = true; 38 web.JavascriptObjectRepository.Register("bound", new Bound(), isAsync: false, options: BindingOptions.DefaultBinder); 39 } 40 41 private void btn_Click(object sender, EventArgs e) 42 { 43 //C#调用JS 44 web.ExecuteScriptAsync("alert('C#调用JS')"); 45 web.ShowDevTools(); 46 } 47 } 48 class Bound 49 { 50 public string val { get; set; } 51 public void print() 52 { 53 Console.WriteLine("Bound Val: " + val); 54 val = "update"; 55 } 56 } 57 }
4. C#调用JS
5. JS调用C#
本文地址:https://www.cnblogs.com/wunaozai/p/15872741.html
个人主页:https://www.wunaozai.com/