代码如下:
UINT ThreadFunction(LPVOID pParam)
{           
 CDlg *p=(CDlg *)pParam;
 ((CDlg *)pParam)->m_sThPos.Format("%f", m_dTPos);
  p->UpdateData(false);//执行到此句后报错
      
return 0;
}

解决方案 »

  1.   

    #define USERUPDATE WM_USER+100
    然后添加USERUPDATE的消息映射
    WM_MESSAGE(USERUPDATE, fun)在fun中
    UpdateData(false);然后在线程中
    CDlg *p=(CDlg *)pParam;
     ((CDlg *)pParam)->m_sThPos.Format("%f", m_dTPos);
      p->SendMessage(USERUPDATE, 0, 0);//执行到此句后报错
      

  2.   

    正好碰到这个问题,在CDlg中重载AssertValid方法:
    如下,在Dlg.h中添加函数声明:void AssertValid() const;
    在Dlg.cpp中添加函数定义:
    void CDlg::AssertValid() const
    {
         if (m_hWnd == NULL)
    return;     // null (unattached) windows are valid     // check for special wnd??? values
         ASSERT(HWND_TOP == NULL);       // same as desktop
         if (m_hWnd == HWND_BOTTOM)
    ASSERT(this == &CWnd::wndBottom);
         else if (m_hWnd == HWND_TOPMOST)
    ASSERT(this == &CWnd::wndTopMost);
         else if (m_hWnd == HWND_NOTOPMOST)
    ASSERT(this == &CWnd::wndNoTopMost);
         else
        {
    // should be a normal window
    ASSERT(::IsWindow(m_hWnd));
         }
    }
      

  3.   

    TO:rockally
    我按照你的说的方法做了,结果还是是不行,会不会还有其他地方不安合适啊 ?
      

  4.   

    p->UpdateData(false);//执行到此句后报错换成给窗口发个消息,窗口接到这个消息后进行窗口更新,
    不要在线程里更新窗口。。
      

  5.   

    b2b160和lzf8977说的对不过这里发消息用PostMessage比较好,避免线程的死锁。
      

  6.   

    向指定窗口发送消息WM_SETTEXT
    先保存文本框句柄:
    CWnd * pwnd=GetDlgItem(IDC_EDIT1)->GetSafeHwnd();线程发送消息:
    SendMessage(pwnd->GetSafeHwnd(),WM_SETTEXT,0,(LPARAM)(LPCTSTR)szCaption);
      

  7.   

    可以啊,原来的帖子在这里,你可以看看,我就是这样解决的。http://blog.csdn.net/xiaoqiqixiao/archive/2006/01/25/588162.aspx