异步函数与窗口

本节内容可参考示例文件"CaseStudy\异步函数.Table"。

上一节提到,因为异步函数无法处理UI,所以我们专门提供了6个异步对话框。

其实不止对话框,窗口也属于 UI 范畴,同样存在异步调用的问题。

新建一个函数OpenWindow,代码为:

Forms("独立窗口").Open()

然后在命令窗口异步执行这个函数:

Functions.ExecuteAsync("OpenWindow")

执行后,Foxtable可能会失去响应(界面卡死),甚至崩溃。具体表现可能因操作系统和窗口类型而异,但根本原因都是因为在非UI线程中直接操作了UI元素。

为解决上述问题,窗口增加了一个OpenAsync方法,专门用于在异步函数中打开窗口。

新建一个异步函数OpenWindowAsync,代码为:

'''Async
Forms(
"独立窗口").OpenAsync()

现在在命令窗口测试下面的代码,则一切正常:

Functions.ExecuteAsync("OpenWindowAsync")

如果希望窗口打开后才执行后续代码,可以加上Await,例如:

Await Functions.ExecuteAsync("OpenWindowAsync")
'
后续代码

如果你希望异步函数本身在打开窗口后才执行后续代码,可以将函数代码改为:

'''Async
Await  Forms("独立窗口").OpenAsync()
'后续代码

因为
OpenAsync本就是异步函数,可以用Await等待。

最后
如果要在异步函数中关闭窗口,必须用CloseAsync方法,例如:

Forms("独立窗口").CloseAsync()

总结

1、在异步函数中,用OpenAsync方法打开窗口

2、在异步函数中,用CloseAsync方法关闭窗口


本页地址:http://www.foxtable.com/webhelp/topics/6363.htm