messagebox 无法阻止程序运行

homesmile 2009-07-10 08:58:01
在程序中,当读取结束时,弹出消息框message,界面上的控件都不能使用,但是其他程序仍然在运行,导致读取的时间越长,messagebox越多,请问怎么使messagbox显示时,程序都停止,当响应messagebox后,程序再运行

MessageBoxW(_T("读取完成"),_T("提示"),MB_TASKMODAL|MB_OK);

只有3个参数
...全文
151 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
MS_Frank 2009-07-14
  • 打赏
  • 举报
回复
你的理解有误,MessageBox,当执行这个函数后,它会阻调用它的线程的运行(就是会挂起调用线程)。当单击“确定”后才会恢复。。

楼主你首先要理解线程和进程的关系。你自然就明白了。
homesmile 2009-07-14
  • 打赏
  • 举报
回复
多谢各位!已经解决,
::KillTimer(NULL,timerHandle);
MessageBox(_T("读取完成"),_T("提示"),MB_OK);
timerHandle=::SetTimer(NULL,1, TIMER_DELAY, (TIMERPROC) Timer);
上次没有给事件句柄再次赋值。
homesmile 2009-07-13
  • 打赏
  • 举报
回复
修改了,但是还是不好用,在定时器的程序中使用messageboxW,这样不行吗?
::KillTimer(NULL,timerHandle);
int messageid=MessageBoxW(_T("读取完成"),_T("提示"),MB_OK);

if (messageid==IDOK)
{
::SetTimer(NULL,1, TIMER_DELAY, (TIMERPROC) Timer);
return;
}
else
{
SuspendThread(GetCurrentThread());
}
问题,第一次好用,在以后还是很多messagabox弹出,请问怎么修改?
世外涛缘 2009-07-13
  • 打赏
  • 举报
回复
要想把所有线程都阻塞,那就得在messagebox弹出之前,遍历进程内的所有线程,调用SuspendThread。
等messagbox之后,在遍历所有线程,调用ResumeThread。
(messagebox所在的线程不用这么做了,messagebox已经做了阻塞线程和恢复的动作)
beyondma 2009-07-13
  • 打赏
  • 举报
回复
只能阻这个线程,不能阻进程:)
载舟之水 2009-07-13
  • 打赏
  • 举报
回复
SuspendThread 其他线程
xmsheji 2009-07-12
  • 打赏
  • 举报
回复
支持楼上,多线程是这样的。
zkhraul 2009-07-12
  • 打赏
  • 举报
回复
单线程是肯定不会有这问题的
儿大不由爷 2009-07-12
  • 打赏
  • 举报
回复
阻工作的线程就行了
hhygcy 2009-07-10
  • 打赏
  • 举报
回复
你是不是在一个线程里面弹出messagebox的
那样是不能阻止主线程的
homesmile 2009-07-10
  • 打赏
  • 举报
回复
这是那段代码,设置断点跟踪,当messagebox执行后,又返回来执行ReadShow,没有执行if判断,而且messagebox的返回值也不对,怎么回事?
if (type == MIFARE_1K && blocksRead >= NUM_1K_BLOCKS)
{

ReadShow();
int messageid=MessageBox(_T("读取完成"),_T("提示"),MB_OK);
if (messageid==IDOK)
{
return;
}
else
{
SuspendThread(GetCurrentThread());
}

// return;
}

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧