能用的和不能用的
凡是在主线程中创建的对象,例如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。