求救,子线程陷入死循环

ldxab 2009-10-08 10:40:46
我有这么一个程序,主线程运行时不断的向两个arrarylist型的数组a1,a2填入数据,a1的数据当做x,a2的数据当做y,同时开辟一个子线程用于画线,事先不知道会有多少数据,现在发现当主线程运行完后(即数据不在填入arraylist),子线程陷入死循环,请问有什么好方法能不使子线程陷入死循环,结束子线程呢?
private void drawline() //画图函数,子线程调用
{
Graphics g = this.CreateGraphics();
Pen p = new Pen(Color.Green, 3);
int i = 0;
int mycount=2;
while (i <= a2.Count)//待解决,是死循环,找不到更好的解决方法
假设有100个点,最多画99次,即i=99,但a2.count=100,i总是<100
{
if (a2.Count >= mycount);
{
g.DrawLine(p, (float)a1[i], (float)a2[i], (float)a1[i + 1], (float)a2[i + 1]);
i++;
mycount++;
}
}
}
...全文
141 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ldxab 2009-10-08
  • 打赏
  • 举报
回复
不用强制关闭有没有方法?
patrickpan 2009-10-08
  • 打赏
  • 举报
回复
子线程死循环没有关系的. 定义一个静态线程变量(不一定是静态,主线程可以访问就OK)
Thread thread = new Thread(new ThreadStart(drawline));
Thread.start();

主线程退出之前,结束子线程.
if(thread != null && thread.IsAlive)
thread.Abort();
随笔敲的代码,可能有错误.

24K純帥 2009-10-08
  • 打赏
  • 举报
回复
up
yidichaxiang 2009-10-08
  • 打赏
  • 举报
回复
mark
wzuomin 2009-10-08
  • 打赏
  • 举报
回复
帮顶
ssmartboy 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wartim 的回复:]


而且你的代码很乱,变量定义太多,应该优化一下

[/Quote]
颇有同感
wartim 2009-10-08
  • 打赏
  • 举报
回复
因为i始终比mycount小,所以这样就可以了
while (mycount <a2.Count)

而且你的代码很乱,变量定义太多,应该优化一下
wartim 2009-10-08
  • 打赏
  • 举报
回复
所以应该
while (i <= a2.Count&&mycount<a2.Count)
当超出总数是就跳出循环
wartim 2009-10-08
  • 打赏
  • 举报
回复
if (a2.Count >= mycount); // 不知道你这个分号到底有没有


假设a2.count固定100

i mycount a2.count
0 2 100
1 3 100
...
97 99 100
98 100 100
看接下来这次
99 101 100

i <= a2.Count ?99<100 成立,继续循环

if (a2.Count >= mycount) ?100>=101 不成立

不成立不执行
{
i++;
mycount++;
}
i 永远是99,i <= a2.Count ?99<100 永远成立
if (a2.Count >= mycount) ?100>=101 永远不成立
于是永远循环
ssmartboy 2009-10-08
  • 打赏
  • 举报
回复
你是否把 if (a2.Count >= mycount)改成if (a2.Count >= mycount-1) 试了没有,我想这句话有问题
你可把程序全部贴上来我按你的思路调试出来
ssmartboy 2009-10-08
  • 打赏
  • 举报
回复
当然应该用动态的,我说数组又没说动态还是静态的(我的也可以做动态的),但是你这样,一个放X,一个放Y是极其不自然的(一个点放在两个地方,一条直线还要和两个数组的四个数值相关,确实是不自然),不信你叫其他程序员感觉一下.存技术讨论,你说的有理我欣然接受!!大家也可发表意见
ldxab 2009-10-08
  • 打赏
  • 举报
回复
用几个数组有什么用?我必须用动态的,因为我也不知道开始有几个点,
ssmartboy 2009-10-08
  • 打赏
  • 举报
回复
是的没有错的,if (a2.Count >= mycount-1)
你的程序逻辑有问题,即使要用两个数组也应该,一个放A点,一个放B点,用Point的数组好了;或者自己写一个类放直线的两顶点,然后再申明用直线类的数组,你这样图省事,倒害了自己,把自己搞晕了,

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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