进度条重绘问题

csl312211865 2009-09-14 05:32:41
最近给教务处的老师开发了个导入学生数据的小软件。学生记录好几万条,导入数据库需要点时间,于是用上了进度条,主要用来显示导入数据的情况。主要的“导入”按钮时通过对Excel表格中,读取一条记录,格式化到SQL语句里,再导入数据库,每导入一条使进度条前进1,进度条的总范围是记录的条数。
基本问题已解决,主要是在导入过程中,比如说导入了一半,进度条也前进了一半,这时候切换到其他窗口,然后再切换回来,就会发现整个窗口除了标题栏,其它是空白的了,也就是看不到进度条的前进效果了,导入完成后还是可以看到进度条到了100%的。
个人认为原因是切换回来的时候,发送了WM_PAINT消息,但是程序现在正在处理“导入”按钮中的代码,而WM_PAINT又不是高优先级的,所以系统先处理完“导入”按钮中的代码后,再处理WM_PAINT,所以就导致了从别的窗口切换回来窗口“空白”的效果。
不知道这么分析是不是正确的?
请大虾们指教。
另外该怎么解决这个问题呢?
...全文
321 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
someboring 2009-09-22
  • 打赏
  • 举报
回复
多线程相关吧
lvchun012 2009-09-18
  • 打赏
  • 举报
回复
数据处理和界面刷新线程分开,特别是涉及到界面的系统里,
fishion 2009-09-18
  • 打赏
  • 举报
回复
声明
public:
static UINT __cdecl YourThread( LPVOID pParam );

开始
AfxBeginThread(YourThread,this);

执行过程
UINT __cdecl CYourDlg::YourThread( LPVOID pParam )
{
CYourDlg*pYourDlg = (CYourDlg *)pParam;
//添加数据库操作
return 0;
}
csl312211865 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhengq06 的回复:]
昨天用进度条也出现同楼主遇到一样的问题

进度条画不出来

另开一个线程用来画进度条就好了

http://topic.csdn.net/u/20090914/10/d1e63ca3-a9be-45fd-ab3e-d6cbee2cea17.html

有位朋友给出了不错的解决方案 希望对你有用

[/Quote]
能不能给个例子。。。还没写过多线程的程序。。。
csl312211865 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fishion 的回复:]
声明
public:
static UINT __cdecl YourThread( LPVOID pParam );

开始
AfxBeginThread(YourThread,this);

执行过程
UINT __cdecl CYourDlg::YourThread( LPVOID pParam )
{
CYourDlg*pYourDlg = (CYourDlg *)pParam;
//添加数据库操作
return 0;
}
[/Quote]
麻烦再请问下这位大虾,我用pYourDlg访问CYourDlg的公有成员时,马上就会出错,出来个Unhandled exception,传递this指针不就是为了访问原对话框中的数据吗,是哪里出了问题呢?
ASIC_E 2009-09-15
  • 打赏
  • 举报
回复
用多线程就可以解决了。
zhengq06 2009-09-15
  • 打赏
  • 举报
回复
昨天用进度条也出现同楼主遇到一样的问题

进度条画不出来

另开一个线程用来画进度条就好了

http://topic.csdn.net/u/20090914/10/d1e63ca3-a9be-45fd-ab3e-d6cbee2cea17.html

有位朋友给出了不错的解决方案 希望对你有用
Qt-UI 2009-09-15
  • 打赏
  • 举报
回复
用多线程就行了 新开一个线程负责导入数据 主线程负责接受导入状态重设进度条就不会出现这个问题了
Allen_zhang 2009-09-15
  • 打赏
  • 举报
回复
起一个工作者线程,你导入的时候你的界面线程阻塞了
你在工作者线程中给界面线程post消息让他更新一下进度条就可以了
MoXiaoRab 2009-09-14
  • 打赏
  • 举报
回复
将数据库操作放到另外一个线程中,不要影响主线程的界面重绘
zoulie 2009-09-14
  • 打赏
  • 举报
回复
你的进度条刷新界面跟读数据库记录的操作是不是同一个线程里面?
csl312211865 2009-09-14
  • 打赏
  • 举报
回复
高手们都去哪了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧