オブジェクトを作成するコンソールテストアプリケーションを作成しました。&オブジェクトは2つの独立したスレッドで2つの関数を呼び出します。 1つのスレッドは、1から20の数字を逆の順序でもう一方の数字の形で印刷します。メインスレッドのデバッグ時にワーカースレッドが実行されないのはなぜですか?
問題は、メインスレッドのデバッグを停止しない(つまりf5を押す)まで、最初のワーカースレッドがデバッグされないという問題です。答えは?
class Program
{
static void Main(string[] args)
{
DisplayData dd = new DisplayData();
ThreadStart ts1 = new ThreadStart(dd.DisplayNumber);
Thread t1 = new Thread(ts1);
t1.Name = "Display Numbers";
ThreadStart ts2 = new ThreadStart(dd.ReverseNumbers);
Thread t2 = new Thread(ts2);
t2.Name = "Reverse Numbers";
t1.Start(); //Keep 1st break point at this location. Then press F10.
t2.Start(); //Keep break point at this location permanently
}
public class DisplayData
{
public void DisplayNumber()
{
int length = 20;
Console.WriteLine("\nNumbers in correct order.\n");
for (int i = 0; i < length; i++)
{
Console.WriteLine("DN: The value of i is: " + (i+1) + " " + Thread.CurrentThread.ManagedThreadId + " " + Thread.CurrentThread.Name);
//Thread.Sleep(1000);
}
}
public void ReverseNumbers()
{
int length = 20;
Console.WriteLine("\nNumbers in reverse order.\n");
for (int i = 0; i < length; i++)
{
Console.WriteLine("RN: The value of i is: " + (length - i) + " " + Thread.CurrentThread.ManagedThreadId + " " + Thread.CurrentThread.Name);
//Thread.Sleep(1000);
}
}
sDisplayNumberとReverseNumbersはどのように見えますか? –
1つの問題は、t2.Start()に降りると、スレッドが開始されたときを正確に保証するものではなく、t1がまだ開始していない可能性がありますが、その行を一時停止しているため何も起こりません。 t1.Start()とt2.Start()の間に行を置くと、スレッドが起動したかどうかを確認してから、t2を起動するとうまくいくでしょう。 –
t1.Start()とt2.Start(0からt1が実行される)の間にConsole.ReadKey()を置くと、 –