现在的位置: 首页 > 综合 > 正文

在线程中访问控件应注意

2011年09月21日 ⁄ 综合 ⁄ 共 366字 ⁄ 字号 评论关闭

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

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

抱歉!评论已关闭.