开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 416|回复: 19
收起左侧

[完成] 炫彩界面库,句柄出错问题

 关闭 [复制链接]
结帖率:38% (5/13)
发表于 2024-8-7 12:29:57 | 显示全部楼层 |阅读模式   浙江省温州市
100精币

最近使用火山和炫彩界面库,遇到一个很头疼的问题。  就是运行窗口后,如正在访问网页,或者循环将返回给窗口内的组件。此时如果关闭窗口,就会弹出输入句柄无效这种错误。

经过排除,发现是因为窗口关闭,执行此命令运行后,窗口内的组件还在被调用导致的,这个炫彩本身没有自动释放的? 应该如何解决呢? 还有炫彩界面库的窗口类 只能是XCGUI? 不能修改其他的吗?有用过这个界面库的朋友求帮助。


a1.png

最佳答案

查看完整内容

不要在线程里面操作UI,最好用标签反馈事件转到主线程再修改

签到天数: 23 天

发表于 2024-8-7 12:29:58 | 显示全部楼层   重庆市重庆市
不要在线程里面操作UI,最好用标签反馈事件转到主线程再修改
回复

使用道具 举报

签到天数: 23 天

发表于 2024-8-7 13:04:44 | 显示全部楼层   重庆市重庆市
包括系统原生窗口组件也是这样,只是系统组件内部处理了,最终都是回到主线程更新UI,并不会因为100个线程,就真的100个同时读写UI。
回复

使用道具 举报

结帖率:38% (5/13)
 楼主| 发表于 2024-8-7 13:32:24 | 显示全部楼层   浙江省温州市
hxznhf 发表于 2024-8-7 13:03
不要在线程里面操作UI,最好用标签反馈事件转到主线程再修改

意思不要在线程里操作? 但是如访问网页,多次循环 必须要线程里啊,要不然直接卡主界面呢。这个问题应该是这个界面库本身需要自动释放,不自动释放肯定出错啊。用火山本身的窗口 同样的操作就不会出错

点评

你说的网页访问、多次循环,你用多线程没关系啊,只是在遇到有操作窗口组件时,就利用标签反馈事件(内部调用的sendmessage来转移代码到主线程,操作窗口组件的代码放到标签的反馈事件下面,标签反馈事件设计出来就是   重庆市重庆市  详情 回复 发表于 2024-8-7 13:50
回复

使用道具 举报

签到天数: 23 天

发表于 2024-8-7 13:41:33 | 显示全部楼层   重庆市重庆市
火山窗口就是系统自带的窗口组件,系统自带的窗口组件,比如编辑框.内容=“frfrg",这个调用是通过sendmessage给系统发消息,然后系在主线程处理消息完成编辑框内容赋值,只是你表面上看起来你是直接通过线程操作的UI,但内部不是。

而第三方UI库,一般为了方便,同样的编辑框.内容=“frfrg",是直接内部读取编辑框这个对象修改相关值,没有系统组件的消息处理流程。所以多线程直接操作了组件,UI库内部因为多线程访问出现冲突报错。

以上就是为什么用户总感觉第三方UI没原生系统UI靠谱,因为实现逻辑不一样。弄清楚问题的本质就好解决了。
回复

使用道具 举报

签到天数: 23 天

发表于 2024-8-7 13:46:10 | 显示全部楼层   重庆市重庆市
虽然系统组件有这道安全措施,但是并不代表就一定很安全,只是可能没遇上,就像易语言多线程读写超级列表框,如果没处理好。虽然没崩溃,但是列表插入的内容有时会错乱。
回复

使用道具 举报

签到天数: 23 天

发表于 2024-8-7 13:50:07 | 显示全部楼层   重庆市重庆市
exiaozi 发表于 2024-8-7 13:32
意思不要在线程里操作? 但是如访问网页,多次循环 必须要线程里啊,要不然直接卡主界面呢。这个问题应该 ...

你说的网页访问、多次循环,你用多线程没关系啊,只是在遇到有操作窗口组件时,就利用标签反馈事件(内部调用的sendmessage来转移代码到主线程,操作窗口组件的代码放到标签的反馈事件下面,标签反馈事件设计出来就是这个用处,只是大多数人都忽略了。
回复

使用道具 举报

结帖率:38% (5/13)
 楼主| 发表于 2024-8-7 13:56:43 | 显示全部楼层   浙江省温州市
hxznhf 发表于 2024-8-7 13:50
你说的网页访问、多次循环,你用多线程没关系啊,只是在遇到有操作窗口组件时,就利用标签反馈事件(内部 ...

你说的标签反馈事件 具体如何操作呢》?我用的炫彩标签组件并没有反馈事件啊 可否给简单例子呢? 还有组件不仅仅是标签啊 有时可能会用到窗口 编辑框等等啊 这些组件炫彩界面库都没有反馈啊

点评

这点我没说清楚,火山是有标签反馈事件,就是利用标签组件而已,多给标签组件加了这个功能,实际上直接用sendmessage就可以,炫彩也提供了一个包装好的命令: vint WINAPI XC_CallUiThread ( funCallUiThread pCa   重庆市重庆市  详情 回复 发表于 2024-8-7 14:01
回复

使用道具 举报

结帖率:38% (5/13)
 楼主| 发表于 2024-8-7 13:59:29 | 显示全部楼层   浙江省温州市
hxznhf 发表于 2024-8-7 13:50
你说的网页访问、多次循环,你用多线程没关系啊,只是在遇到有操作窗口组件时,就利用标签反馈事件(内部 ...

我用的是第三方界面库 而且本身并没有你说的标签反馈事件啊 接触过这个炫彩界面库吗 应该还有其他更好的办法估计

点评

XC_CallUiThread 就是这个命令,给一个回调函数,和一个自定义参数(传自己的数据),等同于标签反馈事件   重庆市重庆市  详情 回复 发表于 2024-8-7 14:05
回复

使用道具 举报

签到天数: 23 天

发表于 2024-8-7 14:01:47 | 显示全部楼层   重庆市重庆市
exiaozi 发表于 2024-8-7 13:56
你说的标签反馈事件 具体如何操作呢》?我用的炫彩标签组件并没有反馈事件啊 可否给简单例子呢? 还有组 ...

这点我没说清楚,火山是有标签反馈事件,就是利用标签组件而已,多给标签组件加了这个功能,实际上直接用sendmessage就可以,炫彩也提供了一个包装好的命令:


vint WINAPI XC_CallUiThread        (        funCallUiThread         pCall,
vint         data
)               
@炫彩_调用界面线程 调用UI线程, 设置回调函数,在回调函数里操作UI,通过SendMessage()实现,阻塞模式

参数
pCall        回调函数 funCallUiThread ; vint (CALLBACK *funCallUiThread)(vint data)
data        用户自定义数据
返回
回调函数返回值
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表