C#莫名其妙死循环是什么情况?

作者&投稿:中叔胁 (若有异议请与网页底部的电邮联系)
c#语言中的死循环处理机制是~

//开启一个新线程,将循环放入新线程中,这样就不会影响主线程public void button1_Click(...){ Thread newThread = new Thread(方法1); newThread.IsBackGround = true;//设为后台线程 newThread.Start();//线程已准备OK}private void 方法1(){ while(true) { //循环体 }}

有你这种想法显然是对windows应用程序的机制不太了解所致.
你的想法是好的,通过另一个按钮去触发事件或改变一些标志的值,以通知按钮1执行的循环,让他退出.但实际上的情况是,按下按钮一后由于这两个按钮的事件都处于窗体的主线程之中,程序在没执行完这个循环的时候,没办法做任何其他的事情.所以你根本也没办法点下按钮2.
要实现类似的效果你可以有两种选择.
1 创建一个新的线程.在按钮1按下后激活这个线程.该线程start后就不断执行这个while循环.记住每次循环体里加一个sleep 让线程暂停一下释放cpu使用权.不然cpu马上100%.
在按钮2的点击事件中停止并关闭你刚才新建的线程.
2 创建一个timer定时器.设置其执行频率. 然后在其Tick事件中写你循环体里的内容.在按钮1里启动这个定时器.
这样相当于主线程每隔一段时间会触发timer的tick事件,执行完后还能干别的.这时候你在按钮2的点击事件里就可以停止这个timer.
具体的代码我不写出来.希望你能自己试着写写.因为也没几行代码.实在写不出再说.

将行3注注释掉,改为return "";试试看顺序是不是对的。

将变量pCardCtr 定义成全局的并且是static类型。
循环之前置0.

从你写的看不出什么问题,现在能想到的是pHand[pCardCtr].CardValue;里是不是改了值?

程序是多线程执行?


泗县15248715713: C#关于死循环的问题 -
悟侨麦道: i=2的时候 (i%2)==0 那么就执行continue,之后的输出的就不执行,i也就不再增加,一直保持为i=2.这时候就造成该程序死循环了....

泗县15248715713: C# for 循环 程序死了!! -
悟侨麦道: 在textBox_答案.Text里面的值不变的情况下,你这段代码是一段死循环,而且没循环一次程序就暂停1000毫秒(1秒). int b1 = textBox_答案.Text.Length是将textBox_答案.Text的长度赋给b1这个变量,而你下一句代码i = b1;将i的值变成了textBox_答案.Text的长度,也就是说在textBox_答案.Text的长度不等于4且小于100的话这段代码就是死循环 希望这对你有用

泗县15248715713: C#语言,处理多线程时,让线程运行死循环,却有线程在处理数据时,意外退出.这是什么原因. -
悟侨麦道: 对滴,没有处理异常,如果线程出现异常的时候就会直接停止运行,建议你try catch你的执行代码

泗县15248715713: C# 程序总是卡死 -
悟侨麦道: 你在主线程里面 while (true){if (i == 100){i = 0;textBox1.Text += strOutput2;strOutput2 = "";Thread.Sleep(500); }又是while(true) 又是 Thread.Sleep 不假死才奇怪呢. 把读文件内容的代码放到线程里面去

泗县15248715713: C# winform 循环不停,也不执行应该执行的程序 -
悟侨麦道: webBrowser1.Navigate(durlo + "&pn=" + i * 10 + "&usm=1");加载完又继续,然后加载完又继续.......

泗县15248715713: 为什么C#游戏循环写成死循环程序就死了? -
悟侨麦道: c++写成死循环可以运行时因为是另外写好了消息相应的处理过程,接收到对应的message,比如鼠标点击,键盘什么的执行相应的动作,你用c#也自己postmessage、sendmessage也可以啊

泗县15248715713: c#语言中的死循环处理机制是 -
悟侨麦道: 1234567891011121314 //开启一个新线程,将循环放入新线程中,这样就不会影响主线程 publicvoidbutton1_Click(...) { Thread newThread = newThread(方法1); newThread.IsBackGround = true;//设为后台线程 newThread.Start();//线程已准备OK } privatevoid方法1() { while(true) { //循环体 } }

泗县15248715713: C# socket 线程 程序卡死怎么解决 -
悟侨麦道: 最主要还是看看是否有循环处理,看看那些while或者for语句 例如收到数据后,循环处理数据,但是循环中将循环变量再次赋值. 或者while语句中,判断条件没有更新导致死循环.

泗县15248715713: C#中怎么防止死循环 -
悟侨麦道: 重点是控制循环条件,有循环结束条件.

泗县15248715713: c#服务端接收死循环问题? -
悟侨麦道: 在循环起始设置一下断点,然后在循环体内分开多个断点,然后在调试,也可以结合MASAGEBOX,看看哪个循环体内会一直跳出massagebox.再去理理那一段的逻辑.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网