百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

BIMFACE二次开发系列53 WinForm使用CefSharp加载模型1 简单应用

haoteby 2025-02-28 15:52 13 浏览

  在我的博客《C#开发BIMFACE系列52 CS客户端集成BIMFACE应用的技术方案》中介绍了多种集成BIMFACE到客户端程序中的方案。最后推荐大家使用 CefSharp组件与WebView2组件。本篇文章介绍使用CefSharp组件如何集成BIMFACE到客户端程序中。

一、CefSharp 简介

CefSharp是一个围绕Chromium Embedded Framework(CEF)的轻量级.NET包装器。它是用C++/CLI编写的。允许开发者在.NET应用程序中嵌入Chromium。可以在C#或VB或任何其他CLR语言中使用。CefSharp同时提供WPF和WinForms Web浏览器控件实现。

功能特点

  • 免费、开源:https://github.com/cefsharp/CefSharp
  • 完善的文档
  • 支持JS、C#、WinForm窗体之间相互通讯与调用
  • 兼容性较好,支持H5、CSS5、WebGL等
  • 支持获取Cookies较全面
  • 其他

二、CefSharp 下载

步骤1 新建WinForm项目

新建一个WinForm窗体应用程序,目标框架选择 .NET Framework 4.5.2,因为新版本的CefSahrp组件最低支持 .NET Framework 4.5.2。

步骤2 通过 NeGet 下载

打开NeGet

(1)搜索 CefSharp

(2)选择 CefSharp.WinForms

(3)选择最新版本

(4)点击【安装】按钮

点击【确定】开始安装。

安装完成后,项目中自动添加了CefSharp.dll、CefSharp.Core.dll、CefSharp.WinForms.dll 类库引用。

工具箱中也增加了CefSharp控件

步骤3 编译项目

编译
BIMFace.SDK.CSharp.Sample.WinForm 项目,生成如下内容

与 CefSharp 相关的共计32个文件,2个目录,文件大小总计216M。这个尺寸相对于业务系统本身来说已经非常大了,最后制作的安装包尺寸也会很大。

其中 locales 目录下是语言包,删除 zh-CN.pak 之外的所有文件,总文件大小可以减少22M左右。

三、CefSharp 集成开发

测试功能设计如下

功能说明

(1)WinForm中加载的网页来自于 BIMFace.SDK\BIMFace.SDK.CSharp.Sample\Pages\BIMFaceDemo7_3.html,所以Web项目要首先运行。

(2)WinForm 窗体中输入 BIMFACE FileId,点击【加载模型/图纸】按钮,调用CefSahrp组件,加载步骤(1)中的网页。代码如下:

// 加载模型/图纸
private void btnLaodBIMFaceFile_Click(object sender, EventArgs e)
{
    string fileId = txtBIMFaceFileId.Text.Trim();
    if (string.IsNullOrEmpty(fileId))
    {
        MessageBox.Show("请填写 BIMFACE FileId。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        return;
    }
    // 将 ChromiumWebBrowserBindObject 实例对象注入到 js 对象中。网页中即可调用 ChromiumWebBrowserBindObject 类中定义的属性、方法
    var objToBind = new ChromiumWebBrowserBindObject();
    chromiumWebBrowser1.JavascriptObjectRepository.Register("_chromeBrowser", objToBind, true, BindingOptions.DefaultBinder);

    string url = "https://localhost:44389/Pages/BIMFaceDemo7_3.html?fileId=" + fileId;
    chromiumWebBrowser1.Load(url);
}

(3)网页中点击【JS 调用 C# 方法】按钮。代码如下:

在入口函数中,获取注入的 ChromiumWebBrowser 对象,名称为 _chromeBrowser。

按钮对应的js方法

// js 调用 C# 方法
function callCharpMethod() {
    // 特别提醒:C# 类中定义的方法名称采用 Pascal 命名。网页中调用的时候必须将方法名称的第一个字母改为小写。否则调用不成功。
    _chromeBrowser.testCalcAdd(6,8)
        .then(function (response) {
            alert(response);
        });
}

特别提醒:C# 类中定义的方法名称采用 Pascal 命名。网页中调用的时候必须将方法名称的第一个字母改为小写。否则调用不成功。

调用的C#方法。定义一个单独的类,用于在CefSahrp组件加载网页之前,将其注入到网页中

(4)WinForm窗体中点击【 C# 调用 JS 方法】按钮。代码如下:

// C# 调用 JS 方法
private void btnCsharpCallJsMethod_Click(object sender, EventArgs e)
{
    Task jsResponse = chromiumWebBrowser1.EvaluateScriptAsync("jsMethodForCSharpTestCalcSub", 25, 7);

    if (jsResponse.Result != null && jsResponse.Result.Success == false)
    {
        MessageBox.Show("C#调用JS方法发生异常。" + jsResponse.Result.Message
            , "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

网页中定义的
jsMethodForCSharpTestCalcSub() 方法如下:

 // js 方法,供C#调用
 function jsMethodForCSharpTestCalcSub(num1, num2) {
     /*如果参数需要是复杂类型,则传递Json格式的字符串,然后反序列化为对象即可使用*/
 
     alert('传入的参数num1:' + num1 + ", num2:" + num2 + '  减法运算 num1 - num2 = ' + (num1 - num2));
 }

特别说明:

(1)C#定义的方法供JS调用,C#方法的返回值类型、参数类型都只能是简单数据类型,如:int、string、bool 等。

(2)JS定义的方法供C#调用,JS方法的返回值类型、参数类型都只能是简单数据类型,如:int、string、bool 等。

一般来说复杂类型就是一个实体类。如果确实想使用复杂类型,建议的解决方案如下:

将复杂类型序列化为字符串,调用方将其反序列化之后再使用。

关于C#与JS互相通讯,请参考CefSahrp官方文档:
https://github.com/cefsharp/CefSharp/wiki/General-Usage#
3-how-do-you-expose-a-net-class-to-javascript

四、CefSharp 组件运行分析

1、进程分析

(1)启动应用程序,CefSharp组件未加载Web网页时,默认启动了2个
CefSharp.BrowserSubProcess 子进程。原因是我当前使用的CefSharp是94.4.50版本,每当new
CefSharp.WinForms.ChromiumWebBrowser() 一个时,会启动2个子进程。

(2)CefSharp组件加载Web网页后,又启动了2个
CefSharp.BrowserSubProcess 子进程,共计4个子进程。原因是 当 chromiumWebBrowser1.Load(url) 时启动2个子进程。不同版本的 CefSharp 组件,启动的子进程数量不同。

2、运行日志分析

CefSahrp组件加载网页浏览BIMFace模型/图纸之后,程序目录多了 GPUCache 目录、debug.txt 文件。

GPUCache目录内容如下。BIMFACE加载模型/图纸时利用了本地电脑的GPU强大的计算功能,所以产生了缓存内容。

debug.txt 内如如下,里面记录了网页的执行过程

五、总结

  • 通过NeGet安装SDK时,运行时环境会被自动下载到当前项目的bin\debug 或者 bin\Release目录下。导致整个项目非常大,大约220M左右。
  • 以独立进程方式运行,消耗内存较多。

  如下是我的一个WinForm程序中使用CefSharp组件的运行状态,其中一个子进程消耗内存达到1.5G,太可怕了

  • 当控件Dock属性设置为 Fill,客户端电脑的缩放与布局不是100%时,窗体呈现黑边(严重bug),并没有完全填充父容器。

《BIMFace.SDK.CSharp》开源SDK。欢迎大家下载使用:
https://gitee.com/NAlps/BIMFace.SDK


欢迎评论区留言互相交流、点赞、转发,每天获取优质IT内容。


#31省增本土35例 涉北京河北等省市#

#曼联主场0-5惨败利物浦 萨拉赫戴帽#

#南京航空航天大学实验室爆燃2死9伤#

#北京2人翻墙离开封控小区前往外地#

#河北门店劫持事件致2死 嫌疑人自杀#

相关推荐

手把手教你构建一个简单的Eclipse RCP应用

EclipseRCP应用,通常用来构建跨平台的图形化管理客户端,Eclipse从IBM开源以来,一直占据开源Java开发平台的头把交椅,现在仍然收到很多人的追捧。今天就带大家通过一个简单的例子:开发...

Eclipse配置maven 环境(maven的配置、以及eclipse中配置maven)

Eclipse配置maven环境的先决条件是,Windows系统已经配置好maven环境Eclipse配置maven环境步骤如下:一、给Eclipse添加本地maven...

如何在Eclipse中搭建Zabbix源码的调试和开发环境

Zabbix是一款非常优秀的企业级软件,被设计用于对数万台服务器、虚拟机和网络设备的数百万个监控项进行实时监控。Zabbix是开放源码和免费的,这就意味着当出现bug时,我们可以很方便地通过调试源码来...

Eclipse中将现有的maven项目 导入Git,并发布到

Eclipse中将现有的maven项目导入Git,并发布到github一、Eclipse中将现有的maven项目导入Git1.将本地的maven项目,添加他的子项目到git仓库,并发布到githu...

eclipse安装图解(eclipse安装教程2021)

下载eclipse之前请先安装jdk、查看自己电脑系统是多少位第一步:打开官网https://www.eclipse.org/downloads/第二步:点击DownloadPackages第三...

Eclipse IDE for C/C++ Developers 开发环境搭建详解

EclipseIDEforC/C++Developers开发环境搭建详解1.到官网下载eclipseforC/C++Developmer解压就行2.下载MinGW用来编译C/C+...

来来来!一文告诉你Eclipse的正确安装使用姿势,你都清楚吗?

前言本学习笔记是有关如何设置Eclipse的详细说明。即使你天天在使用它,但是,相信我,或许你并不足够了解它。安装Java运行时环境Eclipse是Java应用程序,因此设置Eclipse的第一步是安...

纯干货!Eclipse的安装与使用(eclipse 安装教程)

之前有人给小华君留言,说让小华君讲一讲Eclipse,那好,我们今天就简单地讲一下。讲得也是基础部分,如题,主要是Eclipse的安装与使用。废话不多说,开始讲。Eclipse是Java开发的集成开发...

2020 最新版jdk & eclipse下载安装 之JDK(一)

首次安装Eclipse,去官网下载资源找不对安装包,安装之后又报错,如果和我一样的话,那就来看我的分享吧安装eclipse前,需要先安装JDK软件首先,到oracle官网下载JDK安装包下载链接:...

Eclipse 安装教程(附安装包下载)(eclipse安装教程最新版)

Eclipse软件介绍是一个开放源代码、基于Java的可扩展开发平台。它本身只是一个框架和一组服务,通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(Ja...

JDK安装、Eclipse安装及运行环境配置

1、eclipse下载打开地址:http://www.eclipse.org/downloads/;根据自己机器的操作系统,页面上显示适应机器操作系统的Eclipse下载列表,也可以点击下图所示位置切...

Ubuntu Linux 21.10官方壁纸现已提供下载 最高8192×4608分辨率

距离十月份的Ubuntu21.10Linux发行版的到来,已只有数周的时间。在今年4月介绍了与之有关的大量细节之后,Canonical现又放出了代号为“ImpishIndri”的这一大...

Linux 4.7系统内核发布:支持RX 480

经过一周休假之后,LinusTorvalds今天正式发布了新版LinuxKernel4.7,可在官网直接下载。Linux4.7版内核的开发启动于5月29日,经过了七个RC候选版,加入了不少新特...

开发企业官网就用这个基于SpringBoot的CMS系统,真香

前言推荐这个项目是因为使用手册部署手册非常...

非常详细的Linux系统安装教程!建议收藏

公众号:老油条IT记一、下载ISO镜像#官网:CentOS:http://mirror-status.centos.org/#cn#其他:网易:http://mirrors.163.com/cento...