多线程入门8-获取线程返回值

admin2020-12-09  1.9K+

我们有时候在界面中创建一个线程,仅仅是为了让界面不卡顿,我们希望用 thead.waitOne() 阻塞等待线程执行完闭(界面线程同时可以响应消息),然后我们又希望在后面关闭线程句柄,并获取到线程最后返回的值。

可能我们希望一切尽可能的简单,尽可能的少写代码,并且也不想用到thread.manage(因为并不需要管理多个线程)。

这时候我们可以使用 win.invoke,
win.invoke 的参数和用法与 thread.invoke完全一样,
区别是 win.invoke 会阻塞并等待线程执行完毕,并关闭线程句柄,同时获取到线程函数的返回值。

示例:

import win.ui;
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
    button={cls="button";text="读取网页";z=1; ...};
    edit={cls="edit";text="edit";edge=1;multiline=1;z=2; ...}
)

winform.button.oncommand = function(id,event){
    winform.edit.text = win.invoke(
        function(){
            import inet.http;
            sleep(3000);//暂停模拟一个耗时的操作
            return inet.http().get("http://www.aardio.com");
        }
    )
}

winform.show()
win.loopMessage();

代码运行测试一下,在线程执行完以前,你仍然可以流畅的拖动窗口,操作界面。

转载请注明原文地址: http://www.aardio.net/read-42.html
最新回复(0)
多线程(thread)
多线程(thread)