如何在线程的函数中调用MFC对话框类的变量?

我做了一个多线程传输文件的对话框 现在想要在对话框上添加一个进度条 为进度条映射变量m_progress这就需要在传输一段文件后就更新m_progress的值使进度条前进 也就是需要在线程函数SendThread(int idx)函数中用到m_progress
但是我不会在线程函数中调用这个对话框的变量 直接调用会报错
一部分代码如下:
void SendThread(int idx) // 传输文件数据的函数(搬运工人)
{
..............
while(LeftToRead>0)
{
ReadOnce=(LeftToRead>ReadSize)?ReadSize:LeftToRead;
count=file.ReadHuge(data,ReadOnce);
while((SOCKET_ERROR== sendSockets[idx-1].Send(data,count)))
{
}
ProgressCount+=count;
m_progress.SetPos(ProgressCount);//需要在这里调用变量 但不成功
LeftToRead=LeftToRead-count;
}
.................
}
我是初学者 希望能给一个比较详细的解决方法...谢谢
void SendThread(int idx) // 传输文件数据的函数(搬运工人)
{
CFile file;
char data[ReadSize];
long BeginPos, Size;
long FileLength;
long ReadOnce, LeftToRead, count;

if(!file.Open(fn[sendingseq],CFile::modeRead|CFile::shareDenyNone))
{
AfxMessageBox("读取文件错误!");
return;
}
FileLength=file.GetLength();
sendSockets[idx-1].Send(&FileLength, 4);
sendSockets[idx-1].Send(fn[sendingseq], 40);
// 获取本线程传输任务(传送块的大小和起始位置)
GetBeginPos(5 , idx, FileLength ,BeginPos, Size); //其中的5表示总共有5个线程,idx表示本线程编号
file.Seek(BeginPos, CFile::begin); //每个线程函数找到自己任务的起始点
LeftToRead=Size;
while(LeftToRead>0)
{
ReadOnce=(LeftToRead>ReadSize)?ReadSize:LeftToRead;
count=file.ReadHuge(data,ReadOnce);
while((SOCKET_ERROR== sendSockets[idx-1].Send(data,count)))
{
}
ProgressCount+=count;
LeftToRead=LeftToRead-count;
}
file.Close();
SetEvent(hsendEvent[idx-1]); // 发信号通知监视线程本线程任
必须将对话框指针传入闷饥线程函数,其后有三种方式可以实现
方法一:中直接调用m_progress.SetPos(ProgressCount);
方法二:可以通过发送自定义消息,让对枝腔话框调用m_progress.SetPos(ProgressCount);
方法三:可以把具体实现放在类内部的成员函数(非静态)中,而在线程函数值用对话框指蚂搭返针调用这个函数,这样比较方便。
VC中推荐在work thread中不要操作界面,所以你最好重新构思你的程序
创建线程时将指针作为参数肆谈传入
AfxBeginThread(SendThread, this, NULL);
在线裂启碰程函数中再旁宏强转使用
UINT CMainFrame::SendThread(LPVOID pParam)
{
CMainFrame *pThis = (CMainFrame*)pParam;
...
pThis->m_progress.SetPos(ProgressCount);
...

return 1;
}
magicpapacy 正解