這裏是類:如何同步這兩個線程?
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