我要从从SQL SERVER中读取数据,检索数据时是检索一个时间段中间的数据,然后插入到对话框中的列表控件中。当记录很多,超过1万条时,在往控件中插入时明显看到界面几乎处于停顿状态,连对话框都拖动不了了。只有等上几秒钟,等数据处理完,然后才能正常使用。有没有什么办法解决这个问题,就是读取再多数据,也不影响界面的显示与使用?请高手给指点一下解决方案。

解决方案 »

  1.   

    目前我知道虚拟表和ado分页两种方法,还在研究中
      

  2.   

    for (int i=0; i<num; i++)
    {
      // insert record[i] to listctrl
      ...  // 插入下面的消息循环将能保证界面继续响应
      MSG msg;
      while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
      {
        ::TranslateMessage(&msg);
        ::DispatchMessage(&msg);
      }
    }
      

  3.   

    使用LVS_OWNERDATA窗口属性吧,无论多少记录都不受影响,不过代码稍微复杂一些
      

  4.   

    for (int i=0; i<num; i++)
    {
      // insert record[i] to listctrl
      ...  // 插入下面的消息循环将能保证界面继续响应
      MSG msg;
      while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
      {
        ::TranslateMessage(&msg);
        ::DispatchMessage(&msg);
      }
    }/////////////////////像这样操作,运行起来界面倒是不受影响了,可结束程序发现窗口虽然已经关闭,可程序还保留在内存中,显然是上面的消息循环导致的,加上它后甚至点击界面的OK按钮都没反应了。请问该怎么解决这个问题。
      

  5.   

    for (int i=0; i<num; i++) 

        //   insert   record[i]   to   listctrl 
        ...     //   插入下面的消息循环将能保证界面继续响应 
        MSG   msg; 
        while(::PeekMessage(&msg,   NULL,   0,   0,   PM_REMOVE)) 
        { 
            if (msg.message == WM_QUIT)
    {
    TerminateThread(hThread,1);
    PostQuitMessage(1);
    break;
    }                ::TranslateMessage(&msg); 
            ::DispatchMessage(&msg); 
        } 
    } -_-b CSDN真#**(@#(..平空加这么多空格干吗??