搜索
查看: 1672|回复: 1

请帮忙看下窗口调用线程解压并刷新进度条点了没反应

[复制链接]

5

主题

18

帖子

104

积分

一级会员

Rank: 2

积分
104
发表于 2018-1-5 22:12:46 | 显示全部楼层 |阅读模式
因为直接开始解压,不小心点到窗口或者拖动窗口的时候窗口会死掉,所以想试下用多线程来解决
看了大大的教程,实验了下确实可以,但是放我自己这里却出现了问题,点击按钮不开始解压
是否我哪里还有错误?请哪位朋友帮忙下,感恩!!


  1. import win.ui;
  2. import fsys;
  3. import sevenZip.decoder2;
  4. import thread.command;
  5. /*DSG{{*/
  6. winform = win.form(text="aardio form";right=529;bottom=229;image=$"\res\bg.jpg";bkBottom=0;bkLeft=0;bkRight=0;bkTop=0;border="thin";max=false;min=false;mode="popup";sysmenu=false;title=false)
  7. winform.add(
  8. btnClose={cls="plus";left=495;top=12;right=513;bottom=30;background="\res\close-default.png";clipBk=false;notify=1;z=6};
  9. btnSetup={cls="plus";text="开始安装";left=191;top=196;right=325;bottom=227;background="\res\setup-default.png";color=16777215;font=LOGFONT(h=-17);notify=1;z=1};
  10. button={cls="button";text="...";left=468;top=166;right=494;bottom=192;z=5};
  11. edit={cls="edit";left=91;top=166;right=460;bottom=192;edge=1;z=4};
  12. progress={cls="progress";left=88;top=176;right=442;bottom=201;border=1;color=65280;hide=1;max=100;min=0;z=2};
  13. static={cls="static";text="安装路径";left=34;top=173;right=86;bottom=191;font=LOGFONT(name='宋体';h=-13);transparent=1;z=3}
  14. )
  15. /*}}*/




  16. archive = sevenZip.decoder2();
  17. cmdLine = _CMDLINE;
  18. appName = ("/res/QQ.7z");



  19. //关闭按钮样式
  20. winform.btnClose.skin(
  21.         background = {
  22.                 hover = "/res/close-hover.png";
  23.                 active = "/res/close-hover.png";
  24.                 default = "/res/close-default.png";
  25.         }
  26. )

  27. //开始安装按钮样式
  28. winform.btnSetup.skin(
  29.                 background = {
  30.                 hover = "/res/setup-hover.png";
  31.                 active = "/res/setup-hover.png";
  32.                 default = "/res/setup-default.png";
  33.         }
  34. )

  35. //拖动窗体
  36. winform.wndproc = function(hwnd,message,wParam,lParam){
  37.         select (message) {
  38.             case 0x201/*_WM_LBUTTONDOWN*/ {
  39.         winform.hitCaption()
  40.         }
  41.     }
  42. }

  43. //关闭按钮
  44. winform.btnClose.oncommand = function(id,event){
  45.         winform.close()
  46. }


  47. //智能判断路径
  48. function rPath(){
  49.    
  50.     var partitionC = ("C:") ;
  51.     var partitionD = ("D:") ;
  52.    
  53.         if (fsys.isDir(partitionD)){
  54.                 partitionD = ("D:\Program Files (x86)");
  55.             return partitionD;
  56.         }
  57.         else {
  58.                 partitionC = ("C:\Program Files (x86)");
  59.             return partitionC;
  60.         }
  61. }


  62. //刷新进度条
  63. var listener = thread.command();
  64. listener.pos=function(winform,posNum){
  65.     winform.progress.pos = posNum;
  66. }




  67. //UI界面开始安装
  68. //uiInstall(path){
  69. var uiInstall = function(winform,path,app){
  70.   
  71.         import sevenZip.decoder2;
  72.         import thread.command;
  73.        

  74.         //打开测试包
  75.         if( !archive.open(app) ){

  76.         //winform.msgbox("程序出错,请重新下载!");

  77.         return;

  78.         }

  79.        
  80.         //进度条显示
  81.         archive.extractSetCompleted = function(lowSize,hiSize,percent){
  82.    
  83.     //winform.progress.pos = percent;
  84.     thread.command.pos(winform,percent);
  85.    

  86.         }
  87.        
  88.         //开始解压
  89.         if( archive.extract(path)){
  90.                
  91.         winform.close();
  92.         }

  93.        
  94. }


  95. //安装按钮开始安装
  96. winform.btnSetup.oncommand = function(id,event){
  97.     //隐藏控件显示进度条
  98.     winform.btnSetup.hide=true;
  99.         winform.edit.hide=true;
  100.         winform.static.hide=true;
  101.         winform.button.hide=true;
  102.         winform.progress.show(true);

  103.         var installPath = winform.edit.text;
  104.        
  105.         //uiInstall(installPath);
  106.         thread.invoke(uiInstall,winform,installPath,appName)

  107. }

  108. /* 程序安装开始  */

  109. var autoPath = rPath();
  110. var defaultPath = ("C:\Program Files (x86)") ;
  111. //窗口界面获取安装路径
  112. winform.edit.text=autoPath;

  113. if(cmdLine == "-a"){

  114.         thread.invoke(uiInstall,autoPath,appName);
  115. }
  116. elseif(cmdLine == "-c"){
  117.         thread.invoke(uiInstall,defaultPath,appName);
  118. }




  119. //高DPI自动缩放界面
  120. winform.enableDpiScaling();
  121. winform.show();
  122. return win.loopMessage();
复制代码
回复

使用道具 举报

187

主题

2540

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
14031
发表于 2018-1-5 23:58:59 | 显示全部楼层
多线程代码出错,要打开控制台才能看到错误信息。
界面循环操作耗时长,需要响应鼠标拖移操作的,加win.peekPumpInputMessage() 或者 win.delay(0)
回复

使用道具 举报

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

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2019-11-15 07:27 , Processed in 0.093750 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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