搜索
查看: 666|回复: 6

winform可以在函数中创建并在多线程中使用吗?

[复制链接]

3

主题

7

帖子

124

积分

一级会员

Rank: 2

积分
124
发表于 2018-8-16 04:22:17 | 显示全部楼层 |阅读模式
代码如下:
import win.ui;
/*DSG{{*/
mainForm = win.form(text="aardio工程4";right=959;bottom=591)
mainForm.add(
button={cls="button";text="button";left=218;top=196;right=405;bottom=318;z=1}
)
/*}}*/

function test2(){
        function test1(){
                import console;
                import win.ui;
                /*DSG{{*/
                var winform = win.form(text="test";right=848;bottom=585)
                winform.add()
                /*}}*/
                for(i=1;3;1){
                        console.log("等待test1..........",..time.now())
                        win.delay(1000)
                }
                winform.close()
        }
        test1()
        for(i=1;3;1){
                console.log("等待test2..........",..time.now())
                win.delay(1000)
        }
}

mainForm.button.oncommand = function(id,event){
        win.invoke(test2)
}

mainForm.show();
return win.loopMessage();
代码这样写test1()后面的win.delay(1000)有问题,求指正!
回复

使用道具 举报

0

主题

24

帖子

168

积分

一级会员

Rank: 2

积分
168
发表于 2018-8-16 10:21:36 | 显示全部楼层
没见过这样的作法,看多线程教程里面也基本是分界面线程和工作线程。 抛开作法的话,上面这个第二个form里面的delay不行,大概是因为winform.close掉了。win.delay是要去处理界面消息,猜测这里面的影响。比如你把winform.close注释掉,或者延迟到下面那个for里面的delay也执行完了再close的话,就会正常。
回复

使用道具 举报

51

主题

286

帖子

1720

积分

荣誉会员

Rank: 8Rank: 8

积分
1720
发表于 2018-8-16 10:29:40 | 显示全部楼层
你把要问的问题说清楚吧,我是想帮你看下的,但不知道你问的什么问题。知道你问的问题才可能去帮你解决。你就只说了一句话问问题,也没表达明白
◆ 半醒半醉日复日,花落花开年复年 ◆
回复

使用道具 举报

0

主题

24

帖子

168

积分

一级会员

Rank: 2

积分
168
发表于 2018-8-16 10:37:45 | 显示全部楼层
5e365 发表于 2018-8-16 10:29
你把要问的问题说清楚吧,我是想帮你看下的,但不知道你问的什么问题。知道你问的问题才可能去帮你解决。你 ...

直接拿他代码执行一下,他说的问题大概是:第二个 test2方法里面下面那个for循环里面的deley无效,会把三个console.log同时执行了
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2018-8-16 12:01:00 | 显示全部楼层
提问以前先看文档和范例,打这么多字不费时间吗?!
答案都是准备好的,写的很清楚:
1、界面线程必须有win.loopMessage();
2、界面线程里最后一个窗口关闭退出消息循环。
基础知识不看,基础的规则都反过来杠,程序怎么可能正常?!
回复

使用道具 举报

3

主题

7

帖子

124

积分

一级会员

Rank: 2

积分
124
 楼主| 发表于 2018-8-16 19:34:02 | 显示全部楼层
是这样的,test2是工作线程函数,原本其中是用win.delay来延时的,现在想在test2中加入test1函数(相对独立的功能,想通过webform模拟点击一下网页),结果test1后面的delay全部失效了,如果改为sleep又怕影响主界面的消息循环不能及时退出工作线程,这个test1能不能加,如果能应该怎么加,还请指教!
回复

使用道具 举报

12

主题

57

帖子

422

积分

二级会员

Rank: 3Rank: 3

积分
422
发表于 2018-8-17 09:23:33 | 显示全部楼层
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="Web Form";right=759;bottom=469)
  4. winform.add(
  5. button={cls="button";text="button";left=532;top=12;right=748;bottom=105;z=1}
  6. )
  7. /*}}*/

  8. import web.form;
  9. var wb = web.form( winform,5/*_UIFLAG_DIALOG*/,,,true);
  10. wb.silent = true;
  11. wb.go("http://www.aardio.com")
  12. winform.show();
  13. wb.wait("");
  14. winform.doSomething = function(){
  15.         ele = wb.querySelector("A[href]")
  16.         if(ele){
  17.                 winform.msgbox(ele.href)
  18.                 ele.click()
  19.         }
  20. }
  21. winform.button.oncommand = function(id,event){
  22.         thread.create(function(winform){
  23.                 winform.doSomething();
  24.         },winform)
  25. }
  26. win.loopMessage();
复制代码


更新日志说最新版web.kit和web.blink支持线程调用了,不过还没有研究呢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2018-10-22 04:36 , Processed in 0.093750 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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