等待窗体完全关闭方式
By
admin
at 2019-07-06 • 0人收藏 • 1763人看过
有时候,窗体里写了很多个线程, 这些线程还不能(不应该)直接被关闭, 需要等待这些线程自己退出之后,窗体才关闭.
这些线程里有一些关闭时候的耗时操作, 那么此时关闭窗体就会出现等待了好一会窗体才关闭的现象, 这样明显是不友好的, 需要提示用户窗体正在关闭功能中, 请稍后.
于是, 就有了下面的代码
mainfrom主窗体:
import win.ui; /*DSG{{*/ mainForm = win.form(text="aardio工程35";right=959;bottom=591) mainForm.add() /*}}*/ mainForm.onClose = function(hwnd,message,wParam,lParam){ //显示友好关闭提示界面 var cm = mainForm.loadForm("\dlg\closeTip.aardio"); //修改提示窗体位置覆盖到主窗体上方,禁止用户再操作 var x,y,cx,cy = mainForm.getPos() //计算提示窗体出现位置 cm.setPos(x+cx/2-cm.width/2,y+cy/2-cm.height/2) cm.show() //模拟耗时操作 win.delay(4000) } mainForm.show(); return win.loopMessage();
closeTip窗体:
import win.ui; /*DSG{{*/ var winform = win.form(text="正在关闭中,请稍后...";right=451;bottom=33;exmode="toolwindow";mode="popup") winform.add( plus={cls="plus";left=0;top=0;right=639;bottom=34;bgcolor=6447459;db=1;dl=1;dr=1;dt=1;forecolor=9959653;hide=1;notify=1;z=1} ) /*}}*/ //设置进度区间,可自动切换到进度条显示模式 winform.plus.setProgressRange(1,50); winform.plus.startProgress(50); import win.ui.mask win.ui.mask(mainForm,true).show() /* //进程自杀 myKill = function(){ import process; ::ExitProcess = ::Kernel32.api("ExitProcess","int(int)" ); ExitProcess(process.getId()); } winform.plus.onDrawForegroundEnd = function(graphics,rc){ //如果进度条到达100%,立即主进程自杀(慎用) if(winform.plus.progressPercentage>=100){ myKill(); } } */ winform.show(); win.loopMessage(); return winform;
效果如下:
当用户点击了关闭的时候, 会弹出关闭中提示,并禁用鼠标点击事件. 当耗时操作结束, 窗体和提示窗会自动关闭.
登录后方可回帖