_beginthreadex(NULL,0,display,this,0,&hThreadId);
unsigned __stdcall CExcelAccessDlg::display(void *p)
{ CExcelAccessDlg* pDlg = (CExcelAccessDlg*)p;
pDlg->m_AccessList.AddString(glostring);
pDlg->m_AccessList.SetCurSel(listid);//--应该显示出来,但是没有,为什么?
listid=listid+1;
return true;
}
unsigned __stdcall CExcelAccessDlg::display(void *p)
{ CExcelAccessDlg* pDlg = (CExcelAccessDlg*)p;
pDlg->m_AccessList.AddString(glostring);
pDlg->m_AccessList.SetCurSel(listid);//--应该显示出来,但是没有,为什么?
listid=listid+1;
return true;
}
void CExcelAccessDlg::display1()
{
int x = m_AccessList.AddString(glostring);
m_AccessList.SetCurSel(x)//--执行到这里就可以显示出来,真是太奇怪了。}
{ CExcelAccessDlg* pDlg = (CExcelAccessDlg*)p;
pDlg->m_AccessList.AddString(glostring);
pDlg->m_AccessList.SetCurSel(listid);//--应该显示出来,但是没有,为什么?
listid=listid+1;
return true;
}
这个线程函数中你为什么要用pDlg->m_AccessList.SetCurSel(listid);
这句呢?他有什么用啊,你在向列表添加数据的时候,列表是在不停的刷新的
你当然看不到了,你只能看到有数据在不停的往里面添!你把这句去掉试试!
但是在你的线程函数结束前, 它的UI是没有机会来更新的。但当你执行SetCurSel()时, 强制执行了UI更新, 它就会出来了。
unsigned __stdcall CExcelAccessDlg::display(void *p)
{
CExcelAccessDlg* pDlg=(CExcelAccessDlg*) p; ASSERT(pDlg != NULL);
if (pDlg != NULL)
{
int x = pDlg->m_AccessList.AddString(glostring);
pDlg->m_AccessList.SetCurSel(x);--执行到这,自动跳出本函数了,下次进入也不是从hThread = (HANDLE)_beginthreadex(NULL,0,display,this,0,&hThreadId);进入,而是从另外一个地方进入。???? } return 0;
}