涉及到异步访问数据库的问题,用不着多线程,使用异步方式就可以达到你要的效果,不过要数据库引擎本身支持。如果你用的数据库是SQL SERVER之类的东西,那么应该是支持异步访问的,在数据连接中设置连接已异步方式进行数据访问即可。如果你是用的ACCESS,FOXPRO等小打小闹的准数据库,那么用OLE DB FOR ODBC建立ADO 连接,可能也能支持异步方式,不过我可不清楚,因为我没有用过这类数据库。数据异步访问的具体情况也比较复杂,每种不同的数据库都有点小异,不过大同还是存在的,你可以查一下数据库的相关资料。还有就是访问的数据源很大,很复杂,需要大量运算的情况最好是用存储过程来实现,存储过程也是支持异步方式的,而且我觉得是效果最好的。
二、对LISTVIEW中的图标进行刷新的问题,其实是空间本身的毛病,也没有更好办法。我想你在刷新前先把当前所有图标清除掉,然后再一次性画上去,这样把刷新的速度降下来,可能感观上能觉得好一些,就象资源管理器里,如果你选择了一个很庞大的文件夹,它的LIST VIEW部分的刷新就是这样的,虽然比较慢,但没有闪烁感,可能会更好。

解决方案 »

  1.   

    你要的效果用数据库的异步访问方式就可以实现,不过需要数据库引擎能支持异步访问。一般情况下,如果你用的是SQL Server之类的东西是能支持的,如果你用的是ACCESS这些准数据库引擎那就难讲了,我反正是没用过ACCESS,但是我在SQL SERVER里用过。在建立数据连接对象是,ADO.CONNECTION对象有一个属性是设置异步还是同步方式的,如果你的数据提供者不支持异步方式,程序会出错,不过可以用OLE DB FOR ODBC试试。如果你的查询语句特别复杂,数据源记录数特别大的话,最好用存储过程来取数据,那样效果最好。一方面查询速度快,二方面能支持客户端的异步刷新。有些软件里,在一个GRID显示数据时,用了异步方式,效果就是一边记录数还在跳动,一边已经把前面查询到的数据显示在GRID里面了。在查询还在执行的同时你已经可以做其他事情了。
    至于第二个问题,闪烁是控件本身的毛病,如果要把采样频率设得比较高的话是不能彻底消除的。你可以这样做,在刷新前先把当前所有图标都清除掉,然后再一次全画上去,这样虽然刷新速度慢了,但是闪烁可能会好一些。就象资源管理器里面,如果你在目录栏点了某个很庞大的文件夹,象windows这样的,它的LISTVIEW里面的项目更新就是先把当前所有项目清除掉,然后把windows目录下所有对象一次画进去,虽然速度比较慢,但是感观上的效果可能更好一些。