这里是类:如何同步这两个线程?
public class Ticker
{
public event EventHandler Tick;
public EventArgs e = null;
public void TickIt()
{
while (true)
{
System.Threading.Thread.Sleep(300);
if (Tick != null)
{
Tick(this, e);
}
}
}
我运行在Windows窗体两个线程:
public partial class Form1 : Form
{
Ticker ticker1 = new Ticker();
Ticker ticker2 = new Ticker();
Thread t;
Thread t1;
public Form1()
{
InitializeComponent();
ticker1.Tick += ticker1_Tick;
ticker2.Tick += ticker2_Tick;
t = new Thread(new ThreadStart(ticker1.TickIt));
t1 = new Thread(new ThreadStart(ticker2.TickIt)));
t.Start();
t1.Start();
}
public void ticker1_Tick(object sender, EventArgs e)
{
if (this.InvokeRequired)
{
this.BeginInvoke((MethodInvoker)delegate
{
ticker1_Tick(sender, e);
});
return;
}
richTextBox1.Text += "t1 ";
}
public void ticker2_Tick(object sender, EventArgs e)
{
if (this.InvokeRequired)
{
this.BeginInvoke((MethodInvoker)delegate
{
ticker2_Tick(sender, e);
});
return;
}
richTextBox2.Text += "t2 ";
}
的问题是后几秒钟线程t超前T1的几个蜱。
首先为什么会发生这种情况,它没有任何意义,因为每个线程在滴答之前应该等待300毫秒?
其次,我怎样才能同步这两个线程,所以他们同时打勾,一个不领先于另一个?
我不能在while循环之前放置一个锁,那么只有一个线程将会运行,而另一个线程将被锁定。在别处放置一个锁并不会改变任何东西。
是你Tick()方法线程安全....? – 2010-12-20 02:15:00
我不确定,如果不是,我不知道如何让它变得安全。 Tick是一个事件:公共事件EventHandler Tick; – JohnCoSystem 2010-12-20 02:22:43
您应该显示整个可执行程序。请参阅[简短,独立,正确(可编译),示例](http://sscce.org/)中的指导原则。 – 2010-12-20 02:26:35