如何就delete出错了?delete一个CProgressCtrl控件对象导致崩溃

怎么就delete出错了?delete一个CProgressCtrl控件对象导致崩溃
我先new了一个CProgressCtrl对象,然后在一个线程函数中释放它导致崩溃。
用到的结构体

struct PAR_TO_PROTHREAD{
CProgressCtrl* pPro;
TCHAR *filename;
};


afx_msg LRESULT CUpDownDlg::OnUp(WPARAM wParam, LPARAM lParam)
{
TCHAR *filename = (TCHAR*)wParam;
CProgressCtrl *upPross = new CProgressCtrl;

upPross->Create(WS_CHILD|WS_VISIBLE|PBS_SMOOTH,CRect(10,10,200,30),this,134);
PAR_TO_PROTHREAD *par = new PAR_TO_PROTHREAD;
memset(par,0,sizeof(PAR_TO_PROTHREAD));
par->pPro = upPross;
par->filename = filename;
CreateThread(NULL,0,UpDownProThreadFunc,(LPVOID)par,0,NULL);

return 0;
}



然后在线程函数中

DWORD WINAPI UpDownProThreadFunc(LPVOID lpParam)
{
PAR_TO_PROTHREAD *par = (PAR_TO_PROTHREAD*)lpParam;
CProgressCtrl *pro = par->pPro;
TCHAR *filename = par->filename;
        //。。。
        delete pro;        //一到这句就崩溃,不知为什么?
delete[] filename;
delete par;


我实在不知道为啥?发现在把new和delete放在同一个函数中是没有问题的。

------解决方案--------------------
给个建议,打印一下这俩个指针的地址,看看他们指向的地址是不是一样的。。。
虽然对这个东西不熟,但是总之先看看现象吧。
------解决方案--------------------
只要和界面想关的或者调用的函数里处理了界面想干的  就不要跨线程  都是通过发消息的方式
------解决方案--------------------
要传: 
控件的 hWnd, 才安全。
------解决方案--------------------
一个控件对象包含2个部分:数据和窗口(数据成员里的句柄标识窗口)。删除对象也分为两步,先销毁窗口,然后删除数据。普通线程不能操作执行任何和窗口相关的工作。具体原因我也没找到一个好的说法。
------解决方案--------------------
可以试试发送消息让控件自己销毁窗口,然后在线程中delete就应该没问题