多线程问题!!!

echo_pingzi 2006-10-25 05:46:00
private int iAry;
private int iShow=0;
private int iStart;
private int iEnd;
public string Message = "";
private void Form2_Load(object sender, EventArgs e)
{
//currentTime = System.DateTime.Now;
//int m = currentTime.Millisecond;
Thread[] ThreadSender = new Thread[20];
iStart = 0;
iEnd = 200;
for (iAry = 0; iAry < 20; iAry++)
{
iStart = iStart + 1;
ThreadSender[iAry] = new Thread(new ThreadStart(Count));
ThreadSender[iAry].Start();

Thread.Sleep(1000);

}



//currentTime1 = System.DateTime.Now;
//int s = currentTime1.Millisecond;
////int Mills = currentTime.Millisecond;

//MessageBox.Show(m.ToString());
//MessageBox.Show(s.ToString());
}
public void Count()
{
for (iShow =iStart; iShow < iEnd; iShow++)
{

this.Message = iShow.ToString();

this.listBox1.Invoke(new EventHandler(WorkerUpdate));
}
}
public void WorkerUpdate(object sender, EventArgs e)
{

this.listBox1.Items.Add(this.Message);
this.listBox1.Update();

}


我这样定义的是不是多线程!
还有我把1到200显示在LISTBOX1里!
可是最后显示的是19-198,还有9个199!
这是怎么回事!
...全文
107 5 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
echo_pingzi 2006-10-25
  • 打赏
  • 举报
回复
我在上面的代码是想建立10个线程同步执行循环!
那样建立是同步执行吗?
echo_pingzi 2006-10-25
  • 打赏
  • 举报
回复
我要想实现10个线程处理1-2000循环写入到LISTBOX,
应该怎么做!
我不要用一个线程来实现!而是要多个线程来实现应该怎么实现
echo_pingzi 2006-10-25
  • 打赏
  • 举报
回复
to scow(怡红快绿)
我想用多线程来解决!
不是单线程来解决的!
单线程这样是没有问题的!
但多线程就出现问题了!
scow 2006-10-25
  • 打赏
  • 举报
回复
好多变量,改了一下可以显示1-200
private static int num = 0;

public Form2()
{
InitializeComponent();
}

private void Form2_Load(object sender, EventArgs e)
{

}

public void Count()
{
for (int i=1; i < 201; i++)
{
Interlocked.Increment(ref num);
this.listBox1.BeginInvoke(new EventHandler(WorkerUpdate));
}
}
public void WorkerUpdate(object sender, EventArgs e)
{
this.listBox1.Items.Add(num.ToString());
Application.DoEvents();
}

private void button1_Click(object sender, EventArgs e)
{
Thread workThread = new Thread(new ThreadStart(Count));
workThread.IsBackground = true;
workThread.Start();
}
Knight94 2006-10-25
  • 打赏
  • 举报
回复
to 还有我把1到200显示在LISTBOX1里!
可是最后显示的是19-198,还有9个199!
这是怎么回事!

当然了,你在主线程中修改是全局变量“iStart”,其次子线程中也修改了全局变量“iShow”,因此会造成线程之间的相互干扰,因此出现你所说的现象也就不那么特别了。

如果子线程和主线程操作同一个资源的话,需要进行同步操作。

不过就你的例子来说,只要把参数局部化就行了,用线程类来实现,参看
http://blog.csdn.net/Knight94/archive/2006/08/24/1111267.aspx
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2006-10-25 05:46
社区公告

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