これは私のコードです:
Thread _th1, _th2, _th3, _th4;
int _i;
void thMethod()
{
while(_i < 100){
Thread.Sleep((new Random()).Next(1,500));
Application.DoEvents();
Console.WriteLine(_i);
_i++;
}
}
private void button4_Click(object sender, EventArgs e)
{
_th1 = new Thread(new ThreadStart(thMethod));
_th1.Start();
_th2 = new Thread(new ThreadStart(thMethod));
_th2.Start();
_th3 = new Thread(new ThreadStart(thMethod));
_th3.Start();
_th4 = new Thread(new ThreadStart(thMethod));
_th4.Start();
}
私がやりたいことは、マルチスレッドを使用して 0 から 99 まで Console.WriteLine を実行することであり、遅延はランダムです。
ただし、私のコードは重複した数字を出力します
さて、これが結果です。
0 1 2 2 4 5 6 7 8 9 10 10 12 13 14 14 16 16 18 19 20 20 22 22 24 24 26 26 28 28 30 31 32 33 34 35 36 36 38 39 40 40 42 44 86 49 50 50 52 52 54 54 54 56 58 58 58 60 60 62 62 62 62 62 65 66 68 68 68 68 70 70 72 72 74 74 76 76 78 78 78 80 82 82 84 84 86 87 88 88 88 90 90 90 92 92 94 94 96 96 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 98 100 101 102
ご覧のとおり、重複した数字が印刷されており、99 でさえ止まりません。
それで...このコードを正しく実行するために修正するにはどうすればよいですか?
====================== のように変更する必要がありますか..
void thMethod()
{
while(_i < 100){
Thread.Sleep((new Random()).Next(1,500));
Application.DoEvents();
Interlocked.Increment(ref _i);
Console.WriteLine(_i);
}
}
これ?