略谈如何从工作线程中弹出对话框

本文介绍了在工作线程中弹出模式对话框可能会遇到的问题及其解决方案。作者通过分析MFC源码中的错误,提出通过传递视图类句柄给线程函数,然后在线程中通过句柄获取视图类指针,再发送自定义消息到视图类以创建对话框的方法。这种方法避免了直接在工作线程中调用DoModal可能导致的错误。
摘要由CSDN通过智能技术生成
               

  朱金灿

     

工作线程,在一些技术文章被称为辅助线程,是相对于主线程而言的。在工作线程中使用界面需要一些技巧。我就曾在工程线程中弹出对话框中遇到过莫名奇妙的错误。下面就我的经验谈谈如何从工作线程中弹出对话框(暂时只讲方法,原理还没彻底弄清楚)。

 

实际上在工作线程中直接弹出模式对话框中在debug模式下有时出错(这里的有时的意思是必然会出错,但是不是每次都出错),弹出模式对话框的代码如下:

 

  1. DWORD WINAPI RecvThread(LPVOID lpParam)    // 工作线程函数
  2. {
  3.      CAIDlgProductName dlg;
  4.      if(dlg.DoModal() == IDOK)
  5. {
  6.      ……
  7. }

  8. }

 

 

      

错误截图:

 

 

 

 

如果跟踪DoModal函数,我们进入MFC源码找到出错的地方:

 

 

  1. #ifdef _DEBUG
  2. void CWnd::AssertValid() const
  3. {
  4.     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值