请问c#如何跳出死循环
有两个按钮一个全局变量booljump=false;第一个按钮事件执行循环while(!jump){//若干语句}想用第二个按钮改变jump的值跳出循环,请问该如何去做,...
有两个按钮
一个全局变量bool jump=false;
第一个按钮事件执行循环
while(!jump)
{
//若干语句
}
想用第二个按钮改变jump的值跳出循环,请问该如何去做,最好有代码例子 谢谢!! 展开
一个全局变量bool jump=false;
第一个按钮事件执行循环
while(!jump)
{
//若干语句
}
想用第二个按钮改变jump的值跳出循环,请问该如何去做,最好有代码例子 谢谢!! 展开
4个回答
展开全部
有你这种想法显然是对windows应用程序的机制不太了解所致.
你的想法是好的,通过另一个按钮去触发事件或改变一些标志的值,以通知按钮1执行的循环,让他退出.但实际上的情况是,按下按钮一后由于这两个按钮的事件都处于窗体的主线程之中,程序在没执行完这个循环的时候,没办法做任何其他的事情.所以你根本也没办法点下按钮2.
要实现类似的效果你可以有两种选择.
1 创建一个新的线程.在按钮1按下后激活这个线程.该线程start后就不断执行这个while循环.记住每次循环体里加一个sleep 让线程暂停一下释放cpu使用权.不然cpu马上100%.
在按钮2的点击事件中停止并关闭你刚才新建的线程.
2 创建一个timer定时器.设置其执行频率. 然后在其Tick事件中写你循环体里的内容.在按钮1里启动这个定时器.
这样相当于主线程每隔一段时间会触发timer的tick事件,执行完后还能干别的.这时候你在按钮2的点击事件里就可以停止这个timer.
具体的代码我不写出来.希望你能自己试着写写.因为也没几行代码.实在写不出再说.
你的想法是好的,通过另一个按钮去触发事件或改变一些标志的值,以通知按钮1执行的循环,让他退出.但实际上的情况是,按下按钮一后由于这两个按钮的事件都处于窗体的主线程之中,程序在没执行完这个循环的时候,没办法做任何其他的事情.所以你根本也没办法点下按钮2.
要实现类似的效果你可以有两种选择.
1 创建一个新的线程.在按钮1按下后激活这个线程.该线程start后就不断执行这个while循环.记住每次循环体里加一个sleep 让线程暂停一下释放cpu使用权.不然cpu马上100%.
在按钮2的点击事件中停止并关闭你刚才新建的线程.
2 创建一个timer定时器.设置其执行频率. 然后在其Tick事件中写你循环体里的内容.在按钮1里启动这个定时器.
这样相当于主线程每隔一段时间会触发timer的tick事件,执行完后还能干别的.这时候你在按钮2的点击事件里就可以停止这个timer.
具体的代码我不写出来.希望你能自己试着写写.因为也没几行代码.实在写不出再说.
更多追问追答
追问
其实我想到也是可能要用多线程,不过我没用过,能否指点一下啊
追答
具体的代码什么的请自行查阅msdn
多线程的写法:
1 在窗体类中定义一个线程Thread类对象.和一个ThreadStart类对象.
2 在窗体类中定义一个动作函数.例如叫Action 里面写这个循环体.
3 在按钮1的触发事件中初始化Thread类对象和ThreadStart对象.将动作函数绑定到线程的委托上去.并启动线程
4 在按钮2的触发事件中停止和关闭Thread对象.
展开全部
是什么C语言呀? C++BUILDER我会。
while(!jump)
{
//若干语句
Application->ProcessMessages(); // 处理事件消息,这最关键,VC++要找类似语句
}
第二个按钮
只要令 jump=true;就退出了。
没有消息处理,第二个按钮的动作得不到处理,第一个就不会退出的、
不要什么多线程,不要搞的太复杂!
while(!jump)
{
//若干语句
Application->ProcessMessages(); // 处理事件消息,这最关键,VC++要找类似语句
}
第二个按钮
只要令 jump=true;就退出了。
没有消息处理,第二个按钮的动作得不到处理,第一个就不会退出的、
不要什么多线程,不要搞的太复杂!
追问
我用c# 不知道行不行 我去试一下
追答
C# 我记得有类似语句,查一下邦助。
Application.DoEvents();
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以啊 用线程即可实现这个功能,因为你运行死循环的时候,程序就类似于卡死了,这个时候根本没法去点击什么按钮,所以用到线程。具体怎么做不是一两行代码可以搞定的,所以不贴出来了。
如果确实需要,可以联系本人。可以做一个例子给你!
如果确实需要,可以联系本人。可以做一个例子给你!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
while(b==true){
…………
if(b==false){
break;
}
这个IF能执行到吗?
public void stop(){
b=false;
}
放到另一个线程肯定可以的。
…………
if(b==false){
break;
}
这个IF能执行到吗?
public void stop(){
b=false;
}
放到另一个线程肯定可以的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询