大家好!我刚开始学VB。我写的程序刚开始运行就从一个文本文件中读取一百万条记录保存一个数组之中。我想在程序运行时,在状态栏显示已读取的百分比。问题时:程序一运行,窗口没有显示,知道文件读取完毕才显示窗口。能不能实现,读取文件的同时,窗体又能响应其他时间!谢谢大家~~~

解决方案 »

  1.   

    一百万条保存在一个数组中?我晕。不了解你那文件中的数据是什么样的,也不知道你想做什么,所以暂不提程序的效率问题了。只解答楼主提出的问题:
    Private Sub Form_Load()
        Dim i As Long
        
        '' 强制窗口显示
        Me.Show
        DoEvents
        
        '' 读数据
        For i = 0 To 99999999
            Me.Caption = i
            DoEvents
        Next
    End Sub
    尽管上面的代码可以实现你的要求,但它不是最科学的方案,因为你可能无法在此期间终止程序的执行。另外,还可以利用Private Sub Form_Activate()事件,就不需要Mw.SHow语句了,但此方法的最大问题就在于在程序的运行过程中,Activate事件可能多次发生。
      

  2.   

    数据格式是这样的:数字(11位)#字母(6个)文件为txt格式的文件,每行存储一个数据。我按二楼的方法在读取数据之间加了个Me.Show 但窗口没有完全显示出来,也无法更新窗口标题。
      

  3.   

    分开处理应该可以吧,
    Private  Sub  Form_Load() 
           Dim   i   As   Long 
            
            ' '   强制窗口显示 
            Me.Show 
            DoEvents 
    End   Sub Private Sub  Form_Activate()
            ' '   读数据 
            For   i   =   0   To   99999999 
                    Me.Caption   =   i 
                    DoEvents 
           Next 
    End Sub
      

  4.   


    一般来讲这种问题都用多线程来解决或者用 createfile , read/writefile (异步读写文件)
      

  5.   

    Open "C:\xx.txt" For Input As #1
    Do Until EOF(1)
    Line Input #1, nextline
    b =nextline 
    '在此处与搜索关键词对照
    '记录搜索结果
       Loop
      

  6.   

    窗口没有完全显示出来? 你是不是没有加"DoEvents" ?如果题目没有要求载入的时间,没有要求占用的内存大小,你应该可以过关了!尽管这方法不怎么科学!^_^
      

  7.   

    另外,可以把读取过程放在Private   Sub   Form_Activate()中,在Activate中加入一个条件,判断一下数据是否已经读过,以避免多次发生此事件时重复读取数据。比如:Private   Sub   Form_Activate()   if Me.Tag="" then
           读数据...
           Me.Tag="1"
       end if
    End Sub
      

  8.   

    使用文本数据库 采用sql语句查询的方式!