点击下载按钮以后开始进行下载,弹出进度条,当下载结束后进度条对话框退出。
处理方法:
1.创建进度条对话框资源;
2.创建线程,在线程中显示进度条对话框并向串口发数据
CDownloadProgress *downloadProgress = new CDownloadProgress;
downloadProgress->Create(IDD_DIALOG_PROGRESS);
thInfo.pBufSize = bufSize;
thInfo.pSendBuf = SendBuf;
thInfo.pdownprogress = downloadProgress;
AfxBeginThread(ControlThread,&thInfo,THREAD_PRIORITY_NORMAL,0,0);
UINT ControlThread(LPVOID lpParam)
{
threadInfo* pInfo = (threadInfo *)lpParam;
unsigned char *pSendBuf = (unsigned char *) pInfo->pSendBuf;
m_downloadProgress = (CDownloadProgress*)pInfo->pdownprogress;
int psize = pInfo->pBufSize;
m_downloadProgress->ShowWindow(SW_SHOW);
m_downloadProgress->CenterWindow();
// 弹出进度条
if(configView->com_send(pSendBuf,psize) != psize)
{
m_downloadProgress->m_ctrlProgress.SetPos(10);
return -1;
}
else
{
for(int i = 0; i<=100;)
{
m_downloadProgress->m_ctrlProgress.SetPos(i);
i += 20;
Sleep(50);
}
SendMessage(m_downloadProgress->m_hWnd,WM_CLOSE,0,0);
}
return 0;
}
出现的问题:数据发送成功了,进度条也好使了,但是接收串口数据的事件不响应了
处理方法:
1.创建进度条对话框资源;
2.创建线程,在线程中显示进度条对话框并向串口发数据
CDownloadProgress *downloadProgress = new CDownloadProgress;
downloadProgress->Create(IDD_DIALOG_PROGRESS);
thInfo.pBufSize = bufSize;
thInfo.pSendBuf = SendBuf;
thInfo.pdownprogress = downloadProgress;
AfxBeginThread(ControlThread,&thInfo,THREAD_PRIORITY_NORMAL,0,0);
UINT ControlThread(LPVOID lpParam)
{
threadInfo* pInfo = (threadInfo *)lpParam;
unsigned char *pSendBuf = (unsigned char *) pInfo->pSendBuf;
m_downloadProgress = (CDownloadProgress*)pInfo->pdownprogress;
int psize = pInfo->pBufSize;
m_downloadProgress->ShowWindow(SW_SHOW);
m_downloadProgress->CenterWindow();
// 弹出进度条
if(configView->com_send(pSendBuf,psize) != psize)
{
m_downloadProgress->m_ctrlProgress.SetPos(10);
return -1;
}
else
{
for(int i = 0; i<=100;)
{
m_downloadProgress->m_ctrlProgress.SetPos(i);
i += 20;
Sleep(50);
}
SendMessage(m_downloadProgress->m_hWnd,WM_CLOSE,0,0);
}
return 0;
}
出现的问题:数据发送成功了,进度条也好使了,但是接收串口数据的事件不响应了
解决办法:将打开串口设置波特率等一系列对串口控件变量的操作提到线程的外面执行。应该是这些设置造成了什么影响
原来可以这样关闭对话框:SendMessage(m_downloadProgress->m_hWnd,WM_CLOSE,0,0);