|

本帖最后由 观音 于 2025-6-5 19:02 编辑
从18年开始,我这边接单、工作制作的软件基本都是使用的exdui,从去年开始正式使用exui进行开发,深度体验了一年,其中开发过单软件数万行代码的程序,基本上所有软件都是多线程操作窗口组件
一、界面功能性
- 经历这么多年的版本更新,功能性确实已经非常不错了,基本上我需要所有功能都可以实现,但是要对很多组件进行一些调整,组件插入元素真的很方便,最完美的功能
- 展示效果基本上都可以通过修改属性来进行调整展示效果
- 部分组件尽量不要用默认的,最好是自己制作 如:信息框_Ex 输入框_Ex 弹出时间选择器_Ex 通过自己绘制窗口来达到自己想要的效果和皮肤
- 可以配合浏览器_Ex,掺杂html代码进行开发
自制 信息框_Ex 输入框_Ex 弹出时间选择器_Ex 效果展示
二、动效支持
- 仅支持一些简单的特效:组件尺寸变化、透明度变化、 位置变化 、高斯模糊 清晰度变化(滤镜Ex组件)
- 当然永远比不过Ex_Dui,对方可以通过gdi随便画出你想要的特效,但是基本上易语言开发的程序也不需要那么花里胡哨的动效
- 对上一条的解释,最近我很少用到一些复杂特效,不知道Exui的画板组件怎么样,以及从来没用过的 动画按钮,当然不能接管组件的绘制事件,那么动效肯定是比不过 Ex_Dui 的
- Exui本身就是以简单、傻瓜式调用、快速开发著称的,如果跟Ex_Dui比较注定是不公平的,我并不觉得现在的动效支持有什么太大的问题,普通开发绝对够用
三、稳定性 这里是你最该关注的问题,也是困扰了我最久的问题,乃至现在我都比较害怕这个话题
这是我对Exui又爱又恨的一个点了,当时按照正常流程开发的程序,因为软件一直需要频繁操作,多线程执行任务修改列表状态,一直在点击各种按钮,差不过平均一台电脑一天闪退 5-10次
单是对Exui代码的优化,前前后后各种修改测试,花了近两个月
所有源码使用系统自带的组件是可以做到完美不闪退的,但是习惯了使用ui来制作,我还是把重心放到了优化闪退问题上
阶段一:闪退频率每天:5-10次
所有闪退都不是固定操作闪退,有的时候操作A功能 有的时候点击了B按钮,但是轻度使用可以做到一周稳定不闪退
在开发时所有线程内修改组件本身都是加入了临界许可的,可以100%保证线程安全,但是非线程内修改组件是没有加临界许可的
下面来说一下我的所有尝试:
尝试给所有线程内读取组件增加读写锁,所有临界许可替换为读写锁,保证线程安全(其实自己也知道 一般读是不需要加锁的,但是以防万一),还是偶尔闪退
把所有读写锁替换为临界许可 ,还是偶尔闪退
所有线程内修改组件前 增加 处理事件()还是偶尔闪退,依次替换为 系统_处理事件()、系统_处理事件1()还是偶尔闪退
在部分修改大量组件,非线程调用代码前后 增减 组件更新缓存() 命令 还是偶尔闪退
这里一旦发现还是闪退,我会把大量优化过的代码还原,只保留最稳定的代码 比如:最后还是替换回了读写锁
最后,通过 构建结构体,窗口EX1.调用反馈事件 传入结构体, 销毁结构体 来进行调用所有线程内修改窗口组件的操作,从这次更新开始,开始稳定,一天闪退缩小到每台电脑3次以内
阶段二:闪退频率每天:3次以内
但是出现了一个新的问题,有时候置超级列表框的数据他会乱码 ,概率比较小,但是一般出现这个问题后,那么软件在10分钟内 基本上必定闪退,之前也有,但是我没有考虑到这块
将 构建结构体,窗口EX1.调用反馈事件 传入结构体, 销毁结构体 操作,替换为 组件提交任务 这样不需要我加临界许可,也不需要我判断销毁结构体了,调用确实会更方便一些
ok,每天闪退现在基本上听不到反馈了,基本上偶尔几天闪退一次,甚至部分人可以做到十几天稳定运行
将一个后台多线程扫描程序 打印窗口日志的命令 也替换为 组件提交任务 ,挂机两三个月了仍然稳定未闪退,下面是我线程调用组件时的简单调用代码
|
componentTask | | | |
组件句柄 | 整数型 | | | | 调用方式 | 整数型 | | | | 任务函数 | 整数型 | | | | 透传参数1 | 整数型 | | | | 透传参数2 | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | byte1 | 字节集 | | | bool1 | 逻辑型 | | | int1 | 整数型 | | | int2 | 整数型 | | | int3 | 整数型 | | | int4 | 整数型 | | | int5 | 整数型 | | | long1 | 长整数型 | | | text1 | 文本型 | | | text2 | 文本型 | | | text3 | 文本型 | | | text4 | 文本型 | | | text5 | 文本型 | | | text6 | 文本型 | | | text7 | 文本型 | | | text8 | 文本型 | | |
判断 (透传参数1 = 101 )  如果真 (位置 ≠ 2 ) 结构体解析到参数 (透传参数2, byte1, text1 ) 弹出通知框Ex (, , byte1, text1, , 1, 1, L_TipsLayoutParent, 3000, , #UI_TipsBox, , )
刚好这里说一下,之前的版本如果窗口最小化了,调用通知框,他会100%闪退,所以进行了判断优化
这个通知框肯定是有点不稳定,我特地加了个设置让他们关掉这个通知,使用通知框偶尔有概率会闪退,不调用就几乎不闪退,我之前使用的版本是 20241201 版本,现在使用的是 20250220 版本,不知道现在是不是修复了这个bug
没有用后面的版本是因为他后面的版本 编辑框 输入模式为密码输入时,修改字体不能修改密码替换符的字体,我反馈了也没修复,就没用后面的版本了,而且最新版树型框的多选也有问题,我也懒得反馈了
这个闪退问题真的是心有余辜,只希望能彻底优化好这个闪退问题
综合来说:暂时不建议小白使用Exui来开发程序,如果只是简单的功能,那么可以,别像我这么大的程序用Exui开发完后,哭都不知道怎么哭,等待后续版本优化后我会持续关注,如果哪天比较稳定了,再开贴跟大家分享
|
评分
-
查看全部评分
|