我的程序如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;namespace MultiThread
{
public partial class frmMain : Form
{
int a = 0;
int b = 0; ThreadStart start;
Thread newthread ; ThreadStart end ;
Thread newthread1; public frmMain()
{
InitializeComponent();
} private void btnThread_Click(object sender, EventArgs e)
{
newthread1.Start();
newthread.Start();
} private void frmMain_Load(object sender, EventArgs e)
{
end = new ThreadStart(UpdateText1);
newthread1 = new Thread(end); start = new ThreadStart(UpdateText);
newthread = new Thread(start);
} private void UpdateText1()
{
for (int i = 0; i < 2000; i++)
{
a = i;
eee.Text = a.ToString();
}
} private void UpdateText()
{
for (int i = 0; i < 2000; i++)
{
b = a;
hhh.Text = b.ToString();
}
} private void btnAbort1_Click(object sender, EventArgs e)
{
newthread.Abort();
}
}
}我本想看到hhh.Text与eee.Text一齐变,最后都为1999,但运行时hhh.Text立即变为0,而eee.Text连续的增加变为1999,请高手指点,我在a=i,b=a,后都加入Thread.Sleep(50);时,可以看到我想要的结果。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;namespace MultiThread
{
public partial class frmMain : Form
{
int a = 0;
int b = 0; ThreadStart start;
Thread newthread ; ThreadStart end ;
Thread newthread1; public frmMain()
{
InitializeComponent();
} private void btnThread_Click(object sender, EventArgs e)
{
newthread1.Start();
newthread.Start();
} private void frmMain_Load(object sender, EventArgs e)
{
end = new ThreadStart(UpdateText1);
newthread1 = new Thread(end); start = new ThreadStart(UpdateText);
newthread = new Thread(start);
} private void UpdateText1()
{
for (int i = 0; i < 2000; i++)
{
a = i;
eee.Text = a.ToString();
}
} private void UpdateText()
{
for (int i = 0; i < 2000; i++)
{
b = a;
hhh.Text = b.ToString();
}
} private void btnAbort1_Click(object sender, EventArgs e)
{
newthread.Abort();
}
}
}我本想看到hhh.Text与eee.Text一齐变,最后都为1999,但运行时hhh.Text立即变为0,而eee.Text连续的增加变为1999,请高手指点,我在a=i,b=a,后都加入Thread.Sleep(50);时,可以看到我想要的结果。
newthread.Start(); 太快了!newthread1.Start(); 一执行就结束了
然后每个线程要访问i之前必须LOCK同时,不要用Start(); 来通知线程开始应该设置一个变量如F,先吧线程都启动起来,此时F为FALSE,两个线程不断检测到F不运行然后,开始按钮把F设置为TRUE,然后使两个线程真正运行起来当然为了看起来更合理点,至少要SLEEP(1)一下
newthread.Start(); 太快了! newthread1.Start(); 一执行就结束了不是太快了,如果是这样的话,那么b应该为1999了,hhh.Text也为1999了