mfc在多线程中 m_downloadProgressCtrl.SetPos(progress); 不生效
时间: 2024-02-11 17:04:49 浏览: 25
可能是因为该函数被调用时,当前线程不是主线程,而是一个工作线程。在多线程编程中,避免在工作线程中直接访问主线程的控件,可以使用消息机制来实现。具体地,你可以在工作线程中使用PostMessage函数向主线程发送一个自定义的消息,并在主线程中编写对应的消息处理函数来更新进度条的进度。例如:
在工作线程中发送消息:
```
UINT MyThreadFunc(LPVOID pParam)
{
// do some work...
int progress = 50; // example progress value
CWnd* pWnd = AfxGetMainWnd();
pWnd->PostMessage(WM_USER_UPDATE_PROGRESS, progress);
// do some more work...
}
```
在主线程中编写消息处理函数:
```
BEGIN_MESSAGE_MAP(CMyDlg, CDialogEx)
// ...
ON_MESSAGE(WM_USER_UPDATE_PROGRESS, OnUpdateProgress)
END_MESSAGE_MAP()
LRESULT CMyDlg::OnUpdateProgress(WPARAM wParam, LPARAM lParam)
{
int progress = (int)wParam;
m_downloadProgressCtrl.SetPos(progress);
return 0;
}
```
这样就可以在工作线程中更新进度条的进度了。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)