int low=0,up=10;
pDlg->m_Ctrl.SetRange(l,up);//此处有时产生异常,但有时却正常,找不到原因,郁闷!

解决方案 »

  1.   

    更详细代码如下:
    ...
    CPgrsDlg progressDlg;
    CWinThread* pThread=AfxBeginThread(fnDoCopy,&progressDlg);
    progressDlg.DoModal();
    ...
    UINT fnDoCopy(LPVOID lParam)
    {
    for(int i=0;i<1000000;i++);//延时,等待dialog显示。(很笨的方法,不知还有好办法么?)
    int low=0,up=nCount;//nCount 保证>1
    CPgrsDlg * pDlg = (CPgrsDlg*)lParam;
    pDlg->m_Ctrl.SetRange(low,up);
    ...
    }
      

  2.   

    你的程序用for(int i=0;i<1000000;i++);延时等待很不精确
    有可能就会发生对话框中的m_Ctrl还未创建完毕你在线程中就已经使用了他的SetRange方法
    为什么不在CPgrsDlg类中开启线程函数呢?
    在CPgrsDlg的initdialog中开启线程就不会出现这种情况了
      

  3.   

    这样等待是不可以的, 它占用全部CPU, DLG很难出来。
    简单的改为Sleep(1000); 等待1秒会好得多。关键在于你可以先出DLG, 再起线程。
    把启动线程的代码移到DLG中的OnInitDialog()中吧。