惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The GitHub Blog
The GitHub Blog
MyScale Blog
MyScale Blog
爱范儿
爱范儿
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
美团技术团队
Y
Y Combinator Blog
博客园 - 叶小钗
Apple Machine Learning Research
Apple Machine Learning Research
Martin Fowler
Martin Fowler
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
M
MIT News - Artificial intelligence
博客园 - Franky
V
Visual Studio Blog
I
InfoQ
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
博客园 - 司徒正美
L
LangChain Blog

博客园 - 袁永福 电子病历,医疗信息化

AI谄媚及在医疗领域中的影响 人类最后一份工作:AI解锁员 第四篇 碳基AI分析法应用:普通人如何面对AI大通缩 第十二篇 碳基AI分析法应用:超大型AI智能体集群锁定机制及解锁方式探讨 病历AI的底线:可解释、可校验、可回溯 —— DCWriter5.0如何守护医疗文书质量? AI 编程盛行的时代,为什么 “『DC- WF2W』” 仍然具有必要性? 客户真心话:选电子病历编辑器,我们为什么认准了南京都昌? AI减负,病历提速|让医生专心看病! 南京都昌助力深圳龙华卫健局区域OFD归档项目成功上线! OFD在医疗文书中的应用|都昌的实践与价值! MWGA更名为DC Winform to web,携“雏鹰扶持计划”正式启航! AI 白嫖代码:中小型开发组织的开源困境与破局之道 —— Blazor WASM 与 MWGA 如何帮助中小团队在 AI 时代破局 MWGA 双线编译技术方案:一份代码,双端生成 MWGA让千亿行代码在Web端“复活”! MWGA - 为了复活1000亿行C#代码 客户说|我们是这样把电子病历从工具变成“智能助手”的! 让WinForms再次伟大 赋能基层,提质增效:都昌电子病历编辑器如何推动基层医疗“智慧升级”? 国家卫健委重磅信号!“人工智能+医疗”战略启动, “隐形冠军”迎来爆发点 喜报!南京都昌信息|医典云再次通过国家高新技术企业认定
MWGA如何帮助7万行Winforms程序快速迁移到WEB前端
袁永福 电子病历,医疗信息化 · 2026-01-30 · via 博客园 - 袁永福 电子病历,医疗信息化

1.前言

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

 MWGA下载地址【https://github.com/dcsoft-yyf/MWGA】,时间轴功能演示地址【https://dcsoft-yyf.github.io/MWGA/dctimeline.html】

2.案例程序说明

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

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

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

(3)市场验证:已在国内及台湾地区的多家医院稳定部署使用,是一个经过实践检验的成熟产品。

这是用来展示跨医疗机构的居民健康档案数据的展示界面:

图片1.1

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

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

 图片2.1

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

 图片3.1

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

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 应用,并在不同环境下展现了出色的兼容性:

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

 图片4.1

在FireFox中运行的效果:

 5.1

在iPad中的运行效果如下:

pad运行界面

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

 安卓运行界面

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

 统信界面

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

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

4.结论与价值

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

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是南京都昌信息科技有限公司完全自主独立研发的软件产品,具有所有版权。】