数据库操作函数,操作数据库时候有个动作非常耗时,我希望能够给用户一个界面提示进度。但是数据库操作又没有回调机制,所以考虑显示一个循环的进度指示告诉用户程序还在运行,别担心死机什么的。实现思路如下: ADODataFetch()
{
.....//考虑这里显示一个非模态窗口,显示一个进度条指示用户
CProgressDlg progressDlg;
progressDlg.Create(....);
progressDlg.CenterWindow();
progressDlg.ShowWindow(SW_SHOW);
//
ADODataOperation();//这一步非常耗时,可能要数分钟时间
.....
progressDlg.DestroyWindow();//销毁进度指示窗口
}//CProgressDlg类
创建一个Dialog,在初始化里面添加一个CProgressCtrl,创建一个Timer,然后通过OnTimer()增加进度条进度我发现生成Progress指示窗口后,进度条并没有动,也被阻塞了。请各位帮忙看看问题处在哪里?我的要求能够实现么?
{
.....//考虑这里显示一个非模态窗口,显示一个进度条指示用户
CProgressDlg progressDlg;
progressDlg.Create(....);
progressDlg.CenterWindow();
progressDlg.ShowWindow(SW_SHOW);
//
ADODataOperation();//这一步非常耗时,可能要数分钟时间
.....
progressDlg.DestroyWindow();//销毁进度指示窗口
}//CProgressDlg类
创建一个Dialog,在初始化里面添加一个CProgressCtrl,创建一个Timer,然后通过OnTimer()增加进度条进度我发现生成Progress指示窗口后,进度条并没有动,也被阻塞了。请各位帮忙看看问题处在哪里?我的要求能够实现么?
{
..... //考虑这里显示一个非模态窗口,显示一个进度条指示用户
CProgressDlg progressDlg;
progressDlg.Create(....);
progressDlg.CenterWindow();
progressDlg.ShowWindow(SW_SHOW);
//
ADODataOperation();//这一步非常耗时,可能要数分钟时间
.....
progressDlg.DestroyWindow();//销毁进度指示窗口
}
CProgressDlg progressDlg; // 这个对话框的创建和销毁放在类的初始化和析构中做;DWORD WINAPI ADOOper(LPVOID lpVoid)
{
HWND hWnd = *((HWND*)lpVoid);
ADODataOperation(); // 进度条通过向窗口句柄发消息终止:
::PostMessage(hWnd, WM_DESTROY, 0, 0);
return 0;
}ADODataFetch()
{
progressDlg.CenterWindow();
progressDlg.ShowWindow(SW_SHOW); // 接着开始模拟进度显示,退出由线程发消息通知
DWORD dwID = 0;
CreateThread(NULL, 0, ADOOper, &progressDlg.m_hWnd, 0, &dwID);
}