簡単な確認ダイアログを作成して、数秒後に自動クローズをするモーダル・ダイアログを作成したのですが、
ダイアログを終了するところで落ちます。
以下の、コードはダメなのでしょうか?
OnInitDialog()時にワークスレッドを作成して、そこでダイアログの描写処理、
処理後にスレッド側でOnOk()などでダイアログを終了します。

//簡単な例(大分省いています・・)
class CTestDlg : public CDialog {
public:
  virtual BOOL OnInitDialog(){
    //初期化時にワークスレッド作成
    AfxBeginThread( CTestDlg::BeginTread, this );
  }
  //ワークスレッド
  bool TreadFunc() {
    //ここでダイアログの描写処理()
    //例えば30秒間タイマーを表示するなど・・

    //ダイアログを閉じる
    OnOk();        //<-うまくモーダル・ダイアログを閉じることができない・・・・
  }
  
  static UINT AFX_CDECL BeginTread(LPVOID pParam) {
    CTestDlg* pObj = (CTestDlg*)pParam;
    pObj->TreadFunc();
  }
};

//呼び側
  CTestDlg cDlg;
  cDlg.DoModal