Please be more careful posting your code. It's so simple to use cut and paste that there is no excuse for making error after error. It's very hard to help you and hardly worth it since you don't accept many answers.
At any rate, I do see a problem with your loop. You should be using the return value from InsertItem()
like this:
UINT CMyDialog::MyThread(LPVOID pArg)
{
for (int nItem=0; nItem<50; nItem++)
{
UINT32 nNum=100;
int nIndex = pDlg->m_listCtrl.InsertItem(0, _T("text"));
pDlg->m_listCtrl.SetItemData(nIndex, nNum);
}
}