人较笨且记性不好,故记录在此.折叠代码打不开请F5.本博中很多是转载收录其他网友的文章(原文地址请见博文末尾),所有权为原作者所有!!!
此博客已不再更新和维护,欢迎关注我的github新博客

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

在某一个线程中访问控件,或对控件进行操作的时候,如调用SetWindowText,当窗口关闭时,有可能产生一个错误.
原因在于:窗口关闭时,控件先销毁,然后在销毁线程,当控件销毁时,若线程继续访问控件的话,则会出错.
另可能是由于,线程访问控件是没有获取到控件的句柄,直接对控件操作,如列表框m_listctrl.AddString("你好"),这的时候在线程里隐藏this指针没有包含列表框的句柄,对列表框操作也会报错.(这里,AddString函数里已有自己的解决办法ASSERT(IsWnd(m_hWnd))…会发生中断)
所以,在对控件操作之前最好是也加一个ASSERT(IsWnd(m_hWnd))…
获取主窗口的句柄指针的方法:CWnd *pWnd = AfxGetMainWnd();

当然,这个思路也适合其他方面线程编程的…望勿忘!

posted on 2011-07-19 18:26  子坞  阅读(281)  评论(0编辑  收藏  举报