MessageBox和线程的问题(200分)

  • 主题发起人 主题发起人 dolphinji
  • 开始时间 开始时间
D

dolphinji

Unregistered / Unconfirmed
GUEST, unregistred user!
程序中用了一个MDIForm窗口和一个MDIChild窗口,还有4个线程做数据采集,线程是一直在运行的。<br>MessageBox是由MDIChild窗口中的按钮发起的。<br>现在的问题是,有时候执行到MessageBox时,不能弹出对话框,程序死掉了一般。此时跟踪线程,线程还是在运转的。<br>这种情况不确定在什么情况下发生。一旦出现这种情况,重启机器重启程序都不管用,但过一段时间自己又恢复正常了。<br>当然,不启动线程时MessageBox总没问题的。<br>不知道问题出在哪里?有人遇到过吗?
 
i:=MessageBox(Application.Handle,'该线数据将被永久删除并无法恢复,继续?','警告信息',MB_OKCANCEL+MB_ICONQUESTION);<br><br>我是这样用的,是和Handle有关吗?
 
也这样用过:<br>i:=Application.MessageBox('确认要停止该线的检测?','警告信息',MB_OKCANCEL+MB_ICONQUESTION);<br><br>一样会出问题
 
在线程中弹出对话框不是会影响线程的继续运行吗?
 
对话框不是从线程中弹出的,是MDIChild窗口中的某个按钮事件中的
 
按理说是不应该出现这种情况的,可以肯定Application和MessageBox都是在默认线程里面运行的.请确定你的采集线程和窗口线程(默认线程)之间都是独立存在的,就是不发生关系的
 
采集线程和窗口线程(默认线程)之间应该是独立的吧<br>采集线程是从主窗口启动的:<br> &nbsp; &nbsp; &nbsp; &nbsp;TTest0Thread:=Test0Thread.create; &nbsp;//启动线程<br> &nbsp; &nbsp; &nbsp; &nbsp;TTest0Thread.Priority:=tpIdle ;<br> &nbsp; &nbsp; &nbsp; &nbsp;TTest0Thread.Resume;<br><br>线程中:<br>constructor Test0Thread.Create;<br>begin<br> &nbsp;FreeOnTerminate:=true; //当线程中断时,TThread 类自动释放<br> &nbsp;inherited Create(true);<br>end;
 
试试,i:=MessageBox(0,'该线数据将被永久删除并无法恢复,继续?','警告信息',MB_OKCANCEL+MB_ICONQUESTION);<br>不行就自己做一个MessageBox的窗口<br>窗口用xxxx.SHOW;的方法
 
这种情况肯定是因为MessageBox被隐藏在主窗口下面造成的
 
后退
顶部