MaxScript 防止你的UI被循环阻塞或卡死
windows.processPostedMessages()
貌似在max2012增加了一个函数 windows.processPostedMessages() ,可以防止循环时max变得未响应
-- 你可以这样使用他 try DestroyDialog roll catch() rollout roll "--" ( button btn1 "0000" on btn1 pressed do ( for i = 1 to 500 do ( windows.processPostedMessages() --将此函数加在此处可防止UI冻结 btn1.text = i as string sleep 0.01 ) ) ) CreateDialog roll
DoEvents
但是要在低版本使用怎么办?你可以将windows.processPostedMessages()替换为.net的函数
-- 你可以这样使用他 try DestroyDialog roll catch() rollout roll "--" ( button btn1 "0000" on btn1 pressed do ( for i = 1 to 500 do ( (dotnetclass"System.Windows.Forms.Application").DoEvents() --将此函数加在此处可防止UI冻结 btn1.text = i as string sleep 0.01 ) ) ) CreateDialog roll
最佳方案
上面2种方法存在一个问题,假设你循环对100个物体进行转换多边形操作,由于此时UI是不被冻结的,你可以轻松选择场景中的物体,然后删除他们,这时候物体不存在,代码则会报告异常
SDK内提供一个更为精妙的设计,可以让你仅解冻需要更新的UI句柄,在代码执行时你将只能操作被预先添加的界面,其他界面将被冻结无法操作
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步