从线程 MFC 将返回值发送到对话框
Send return value to dialog from thread MFC
我正在用do模式创建对话框:
MainHamsterDlg MainHamsterDlg;
if (MainHamsterDlg.DoModal() == IDCANCEL)
break;
然后在该对话框中创建工作线程:
BOOL MainHamsterDlg::OnInitDialog()
{
AfxBeginThread(WorkerThreadProc, m_hWnd, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
CDialogEx::OnInitDialog();
return TRUE;
}
线程必须通过发送返回值 IDCANCEL 退出对话框。
UINT WorkerThreadProc(LPVOID Param) //Sample function for using in AfxBeginThread
{
Sleep(1000); // process simulation
MainHamsterDlg * self = (MainHamsterDlg *)Param;
self->EndDialog(IDCANCEL);
return FALSE;
}
编译时我没有收到任何错误。 处理时,切中要害:
self->EndDialog(IDCANCEL);
错误信息:
Unhandled exception at 0x01503AD4 in L2Hamster.exe: 0xC0000005:
Access violation reading location 0x00000020.
将我指向 DLGcore.cpp 文件:
void CDialog::EndDialog(int nResult)
{
ASSERT(::IsWindow(m_hWnd)); <<<<<===== to that line
m_bClosedByEndDialog = TRUE;
if (m_nFlags & (WF_MODALLOOP|WF_CONTINUEMODAL))
EndModalLoop(nResult);
::EndDialog(m_hWnd, nResult);
}
我不知道我做错了什么。 有什么解决办法吗?
我假设您打算将指向对话框的指针传递给线程进程。但是你传递了空:
AfxBeginThread(WorkerThreadProc, NULL, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
应该是:
AfxBeginThread(WorkerThreadProc, this, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
您还需要协调线程的末尾和对话框的结尾,以确保在线程结束之前不会关闭对话框。(我假设这是某种进度对话框(。
这
对我来说似乎是问题所在:
AfxBeginThread(WorkerThreadProc, NULL, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
其次
UINT WorkerThreadProc(LPVOID Param) //Sample function for using in AfxBeginThread
{
MainHamsterDlg * self = (MainHamsterDlg *)Param;
self->EndDialog(IDCANCEL);
...
}
在这里,Param
是NULL
,所以self
是NULL
。 然后取消引用空指针。
相关文章:
- 如何在另一个线程中关闭 MFC 模式对话框并获取对话框返回值?
- C 从回调函数中的对话框获取并设置值
- OpenFileName对话框返回亚洲字母而不是文件路径
- 根据通过/失败返回,在MFC对话框中更改LED颜色
- 使用 firebreath 插件打开文件夹对话框并异步返回文件夹选择,这样 java 脚本就不会被阻止
- 如何获取保存对话框组合框值
- Qt - 对话框关闭时更改“行编辑”的值
- 主对话框在命令消息处理程序返回之前销毁
- Qt 5.6-从自定义Q对话框返回2 int
- MFC 对话框返回向量
- 从线程 MFC 将返回值发送到对话框
- 在 mfc 中的对话框之间传递值
- 如何基于父对话框中设置的变量在子MFC对话框中显示值
- QInput对话框参数默认值
- MessageBox-当框没有“取消”按钮时返回值
- Win32“浏览文件夹”对话框:用户创建新文件夹时返回错误的文件夹
- 资源对话框返回-1
- 什么时候对话框返回QDialog::Rejected ?
- Rich Edit控件更改对话框返回值行为
- 是否可以从对话框的 DoModal 函数返回自定义值?