能用的和不能用的

凡是在主线程中创建的对象,例如Table、Datatable,窗口及窗口控件,菜单及菜单组件,都不应该在异步函数中调用。

我们可以在异步函数中生成临时的DataTable使用。

不能在异步函数中读写Var变量,不能读写设置等。 Public变量可以在异步函数中使用,但最好不要跨线程更新数据,否则很容易得到错误的结果。

如果异步函数要使用上述任何对象或数据,请另外定义一个函数来完成之,然后在异步函数中用同步方式调用此函数,有关异步函数如何调用同步函数并传递参数,我们在上一节已经介绍了。

默认不能在异步函数使用GroupTableBuilder和CrossTableBuilder统计数据,因为二者的数据来自DataTable,但如果将其FromServer属性设置为True,或者使用Select语句作为统计数据来源,则可以在异步函数中使用,因为此时统计的是后台数据。

可以在异步函数中使用SQLGroupTableBuilder和SQLCrossTableBuilder进行数据统计。

如果需要在异步函数中生成Excel报表,请尽量根据后台数据生成,参考:Excel报表与后台数据
Word报表无法暂时无法根据后台数据生成,所以目前不要在异步函数中使用Word报表,未来应该会改进。

以下类型,都可以直接在异步函数中使用:
SQLCommand
DataTableBuilder
SQLGroupTableBuilder
SQLCrossTableBuilder
SQLJoinTableBuilder

通常我们在服务端事件,例如HttpRequest事件中使用这些类,将得到的统计查询结果发送给客户端。

需要注意的是:不能在异步函数中有任何和UI相关的代码,否则会产生错误,而通过DataTableBuilder、SQLGroupTableBuilder、SQLCrossTableBuilder和SQLJoinTableBuilder这四个类的Build方法生成的表,默认会显示在主界面,所以按照原来的方式在异步函数中更使用这些类会出错,

要在异步函数中正常使用这四个类,必须将Build方法的可选参数设置为True,这样生成的表就不会出现在主界面中,例如:

Dim g As New SQLGroupTableBuilder("统计表1", "订单")
g
.Groups.AddDef("日期", DateGroupEnum.Quarter, "季")
g
.Totals.AddDef("数量")
Dim
dt As DataTable = g.Build(True) ' 一定要将参数设置为True
'后续代码......

 

关于数据源的选择

1、不要使用内部数据源。

2、作为桌面数据库,Access的并发能力非常有限,同时访问的用户一多,很容易崩溃。对于高并发的系统,如果要异步编程访问后台数据库, 请尽量使用SQL Server。


本页地址:http://www.foxtable.com/mobilehelp/topics/277.htm