news 2026/3/1 9:20:42

使用 MWGA 帮助 7 万行 Winforms 程序快速迁移到 WEB 前端

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 MWGA 帮助 7 万行 Winforms 程序快速迁移到 WEB 前端

前言

MWGA,是 Make Winforms Great Again 的缩写,是一个帮助 WinForms 程序快速迁移到 Blazor WASM 平台的高效工具软件。近期,我们借助 MWGA 成功将一个约 7 万行 C# 代码的成熟商业 WinForms 程序迁移至 Web 前端,整个过程快速且代码改动量极小,验证了其在复杂项目迁移中的不可思议的迁移能力。本文将以该案例为基础,概述迁移的核心思路与显著成果。

案例程序说明

本次迁移的对象是一款面向医院行业的商业软件——“时间轴”,主要用于患者体温单曲线图、跨机构居民健康档案数据可视化、手术室排程及住院患者数据分析。该软件功能复杂,紧密贴合医疗临床需求,具有以下特点:

  • 1.代码量大:总计约 7 万行 C# 代码,其中包含近 4 万行与文档排版和 GDI+ 绘图相关的核心逻辑。

  • 2.界面复杂:实现了可交互的时间轴、动态区域展开/收缩、超链接文本、多数据层叠加(如血压曲线、疼痛指数、用药记录)等高级可视化功能。

  • 3.市场验证:已在国内及台湾地区的多家医院稳定部署使用,是一个经过实践检验的成熟产品。 这是用来展示跨医疗机构的居民健康档案数据的展示界面:

这个界面很复杂,将门诊、社区医院、住院、手术等数据串联在一起,形成不同的时间区域,时间区域可以展开和收缩,里面还有超连接文本。用户可以点击左边的坐标尺来显示和隐藏线条,当体温值过高和过低时会有小箭头并伴随纵向文本。

下图是医院内部手术室排程的界面,白色区域是已经开始的手术,灰色区域是计划中的手术,红色块表示发生意外的手术。

这个软件产品还卖到台湾医院了,下图为台湾医院中的住院患者数据展示界面,这里的阴影区域,上边缘是血压的收缩压,下边缘是舒张压,还有一个红色折线表示疼痛指数,上面的表格显示了住院时间,下面的表格显示了用药情况,可以明确展示出用药和血压及疼痛指数之间时间上的先后关系。

这个软件紧密贴合医院临床需求,功能强大,是一个经过市场考验的软件产品。

迁移过程与成果

借助 MWGA,我们以极低的成本完成了这个庞大项目的 Web 化迁移。整个过程遵循高度标准化的流程,核心环节如下:

第一,创建项目

使用VS.NET2022创建一个Blazor WASM9.0的项目。并将原有 WinForms 项目的全部源代码与资源文件复制其中,包括C#代码文件、Form.Designer.cs、Form.resx文件。

第二,引用MWGA程序集

仅需引用一个独立的 DCSoft.MWGA.dll 程序集(约 4MB),即可获得完整的 WinForms 到 WebAssembly 的运行时支持。最新的MWGA程序文件下载地址为【https://github.com/dcsoft-yyf/MWGA】。

第三,配置应用入口

通过MWGA提供的标准化引导模式,在Blazor应用中快速建立WinForms应用的运行环境。只需在HTML页面中添加一个指定的容器元素并进行简单配置,即可将WinForms主窗体启动并渲染于该容器内。

第四,适配性调整C#代码

针对 Web 环境与桌面环境的差异(WEB前端编程相对于WinForms编程最大的差异就是异步编程模式),我们对少量代码进行了适配性修改,主要集中在异步化改造方面(例如文件对话框的调用),以确保在浏览器中的流畅交互。绝大部分业务逻辑、界面布局和 GDI+ 绘图代码均无需改动。

案例程序中的其他代码不需要动,比如几万行的文档排版和绘图代码就不需要修改,例如:

if (text == null) { // 否则只显示日数 text = dtm.Day.ToString(this.Config.DateFormatString); } fullWidth = g.MeasureString(text, txtFont, 10000, centerFormat).Width; if (rect2.Width < fullWidth) { rect2.X = rect2.X - (fullWidth - rect2.Width) / 2; rect2.Width = fullWidth; } //////////////////////////////////////////////////////////////////////// if (clipRectangle.IntersectsWith(rect2)) { Color tc = line == null ? this.Config.ForeColor : line.TextColor; tc = line != null && line.BlankDateWhenNoData == true && this._NoDataInDocument == true ? Color.Transparent : tc; g.DrawString( text, txtFont, GetRuntimeForeColor(tc), rect2, centerFormat); }

第五,处理资源文件

借助MWGA提供的资源管理兼容方案,原有的.resx文件及其在Designer.cs中的初始化代码可被自动识别和处理,无需手动修改。

例如WinForms程序会使用Forms.resx文件来存储窗体中使用到的资源,包括字符串或者图片。只需要添加几行代码,就借助MWGA实现了无缝资源迁移。

第六,测试与成果展示

完成上述步骤后,项目可直接编译为 Blazor WASM 应用。我们在多个平台和浏览器中进行了测试,均获得一致且良好的运行效果。

经过迁移,这款 7 万行代码的 WinForms 应用成功转变为可通过浏览器直接访问的 Web 应用,并在不同环境下展现了出色的兼容性:

在谷歌浏览器中运行界面如下所示:

在FireFox中运行的效果:

在iPad中的运行效果如下:

在安卓平板中的运行效果如下:

该软件在统信操作系统中的运行效果如下:

迁移后的 Web 应用完整保留了原桌面版的所有交互逻辑和界面效果,包括复杂的 GDI+ 绘图、鼠标拖拽、点击响应等行为,用户体验与原生版本高度一致。

公开演示地址:为方便体验,我们提供了该案例的在线演示,大家可通过以下链接访问:【https://dcsoft-yyf.github.io/MWGA/dctimeline.html

结论与价值

本次迁移工作验证了以下结论:

  • 1.修改量极低:面对 7 万行代码,仅对不足 1% 的代码进行了必要的适配性调整,核心业务逻辑与绘图代码得以完全复用。相较于重写或采用其他迁移方案,基于MWGA的改造成本几乎可以忽略不计。

  • 2.功能完整迁移:复杂的用户界面和交互行为被高保真还原至Web前端。

  • 3.真正的跨平台:生成的应用可无缝运行于 Windows、Linux、Android、iOS 及统信 UOS、麒麟等国产操作系统的现代浏览器中。

  • 4.双线发展:借助MWGA和条件编译等技术手段,可以让同一份C#代码同时编译成 .exe 和 .wasm文件,让开发组织用较低的成本同时维护一个软件的Windows桌面版和WEB前端版。让软件产品适应更多的应用场景,为客户系统的平滑升级争取更多的时间。

  • 5.信创适配:对于中国的开发者,MWGA能将基于MS Windows的WinForms程序快速迁移到跨平台的WEB前端,大量软件产品有望躲过信创的斩杀线。

当然WinForms程序不仅仅是UI控件和GDI+,还有很多其他的操作,比如连接数据库、访问本地文件、连接硬件设备等等,而MWGA运行在WEB浏览器沙盒中,没有能力完整的复现WinForms的全部功能集。但是MWGA的设计目标也不是解决所有的问题,单单是解决UI和GDI+的功能迁移问题就足以创造巨大的价值。

MWGA可以说创造了一个WEB前端框架,但是采用了WinForms编程模型。这是一种跨界融合,使得WinForms开发者无需更换技术栈即可参与WEB前端开发。同时,C#的强类型特性与GDI+严谨的编程模型也有助于减少AI编程产生的隐形BUG。

全球数百万开发者过去20年在WinForms技术栈上投资巨大,可能过千亿美元,在云原生成为主流的今天,这些资产常被视为“沉没成本”,让成千上万的企业CTO倍感纠结。而MWGA有望盘活这些“沉没资产”,它率先探索出一条全新的技术路径,随着该路径的不断成熟,有望为全球WinForms技术栈延寿数年,可能会对全球的企业级软件研发领域带来不小的震荡。

【MWGA是南京都昌信息科技有限公司完全自主独立研发的软件产品,具有所有版权。】

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/27 13:58:36

Google打击IPIDEA住宅代理:代理 IP 池设施应具备哪些合规特征?

在 2026 年 1月29日&#xff0c;Google 威胁情报组&#xff08;GTIG&#xff09;宣布成功扰乱了一个被认为是全球最大的住宅代理网络之一 —— IPIDEA住宅代理基础设施&#xff0c;并依托法律行动与技术协作大规模关闭了其控制域名和代理流量通道。此举削弱了该网络对数百万设备…

作者头像 李华
网站建设 2026/2/22 11:12:08

军工项目中使用CKEDITOR粘贴Word公式会丢失格式吗?

前端老哥的CMS编辑器“文档全能王”&#xff1a;一键导入粘贴&#xff0c;680元开箱即用&#xff01; 兄弟们&#xff01;我是西安一名“头发没秃但项目没少接”的前端程序员&#xff0c;最近刚接了个CMS企业官网外包活——客户要在后台新闻编辑器里加“文档导入Word粘贴”功能…

作者头像 李华
网站建设 2026/2/27 6:43:52

2026年5款降AI工具横评:比话、嘎嘎、率零谁更值得用

论文被打回来那天&#xff0c;我花了三天时间测试了5款降AI工具。 从免费的到付费的&#xff0c;从几毛钱一千字的到8块钱一千字的&#xff0c;全试了一遍。结论很简单&#xff1a;追求效果选比话降AI&#xff0c;追求性价比选嘎嘎降AI&#xff0c;预算紧张选率零。 下面把测…

作者头像 李华
网站建设 2026/2/25 20:08:03

关于类 UNIX 系统的学习路线图

我曾经在知乎上看到有人问&#xff1a;为什么国产操作系统都是基于 Linux 内核来进行开发&#xff1f;为什么不能从零开始开发一套操作系统呢&#xff1f;事实上&#xff0c;这其中除了采用开源许可证能有效地规避一些法律问题&#xff0c;基于现成的代码能有助于降低开发成本之…

作者头像 李华