button 旋钮响应时其他控件不可用

button 按钮响应时其他控件不可用
本人在编程中遇到一个棘手的问题,希望各路大神能帮忙解答一下:

button 旋钮响应时其他控件不可用

我的MFC主程序通过按钮响应启动一个exe,这个exe的作用是往某段内存里面写数据,而我的MFC主程序是把exe写入的数据读出来,显示在编辑框中。

button 旋钮响应时其他控件不可用

按钮的响应函数如下:
OnBnClickedButton()
{
ShellExecute(
NULL,
_T("open"),
_T("C:\\Users\\fandy\\Desktop\\新建文件夹\\sharememory\\ShareMemoryClient\\Debug\\ShareMemoryClient.exe"),
NULL,
NULL,
SW_SHOWNORMAL); 

p=pBuf;
int i=1;
while(i<=10)
{

//GetDlgItem(IDC_EDIT1)->SetWindowText((LPCTSTR)pBuf);
//GetDlgItem(IDC_EDIT1)->UpdateWindow();

m_edit=p;

UpdateData(FALSE);
GetDlgItem(IDC_EDIT1)->UpdateWindow();

p+=15;
Sleep(2000);
i++;

}
}

我的问题是,在通过按钮启动了exe之后,MFC的主界面就不能移动了,其他按钮的功能也失效,关键是,编辑框中的数据也没有显示出来,而当我单步调试的时候,编辑框中的数据却能正常显示,这是问什么呢?
希望有人能帮忙解答
不胜感谢


------解决方案--------------------
引用:
本人在编程中遇到一个棘手的问题,希望各路大神能帮忙解答一下:

OnBnClickedButton()启动进程后,要返回的,不能直接在里面执行Sleep等操作。因为你这样把消息处理给阻塞了,其它消息没法处理了。
------解决方案--------------------
阻塞消息循环了,就是把主线程阻塞了,其他UI消息当然响应不了了
------解决方案--------------------
OnBnClickedButton()
{
      启动新进程(即ShellExecute)
      启动新线程
}

新线程(参数)
{
    CEdit  *me=(从参数提取)
    p=pBuf;
    int i=1;
    while(i<=10)
    { 
        me->SetWindowText(p);
        p+=15;
        Sleep(2000);
        i++;
 
    }
}
------解决方案--------------------
比如:
线程定义:
DWORD WINAPI  NewThreads (LPVOID para);
dlg指针指针:
CXXXXXDlg *pDlg;
线程句柄:
HANDLE  xThread;
DWORD   xThreadID;
启动线程时传递参数:
xThread=CreateThread(NULL,0,NewThreads,(LPVOID)pDlg,NULL,&xThreadID);
如果就是在该对话框类里启动线程就用
xThread=CreateThread(NULL,0,NewThreads,(LPVOID)this,NULL,&xThreadID);
线程实现:
DWORD WINAPI  NewThreads (LPVOID para)
{
      CXXXXXGlg    *mDlg=(CXXXXXGlg   *)para;
     ............
}