C# 在控制台中的方法中创建线程在C中失败#

C# 在控制台中的方法中创建线程在C中失败#,c#,multithreading,console,C#,Multithreading,Console,我是新手。 并想用C#编写一个带有线程的简单程序。 目标是当我按下任何键时,它必须创建新线程, 每个线程必须写入每次递增其值的计数, 创建新线程时。但结果并不是预期的:)。 它首先等待按键,按键后只写111111111…。它不写2、3、4等等,那么问题是什么?我如何解决它? 预期结果如下: 111122223333111122223333444411111… 代码如下 class Program { static Thread t; static int

我是新手。
并想用C#编写一个带有线程的简单程序。
目标是当我按下任何键时,它必须创建新线程,
每个线程必须写入每次递增其值的计数,
创建新线程时。但结果并不是预期的:)。
它首先等待按键,按键后只写111111111…。它不写2、3、4等等,那么问题是什么?我如何解决它?
预期结果如下:
111122223333111122223333444411111…
代码如下

class Program
    {
        static Thread t;
        static int count = 1;
        static void Main(string[] args)
        {
            Console.Title = "Thread Test";

            t = new Thread(wait);
            t.Start();

            Console.WriteLine("Main Thread End...");
        }

        static void write(object o)
        {
            while(true)
            {
                Console.Write(o.ToString());
                Thread.Sleep(500);
            }
        }

        static void wait()
        {
            Console.ReadKey();
            Thread tt = new Thread(write);
            tt.Start(count);
            count++;
        }
    }
也许递归wait()方法就是您想要的

    static void wait()
    {
        Console.ReadKey();
        Thread tt = new Thread(write);
        tt.Start(count);
        count++;

        wait(); //Added
    }
尝试此示例:-)

您可以尝试创建更多具有不同优先级的不同任务。 在write()方法中,可以打印当前任务的名称,如果希望在类中存储更多不同的值,可以通过继承添加属性

class Program
{

    static List<Thread> lst = new List<Thread>();

    //static Thread t;
    static int count = 1;
    static void Main(string[] args)
    {
        System.Console.Title = "Thread Test";

        createThread();

        foreach (Thread t in lst) t.Start();


        //System.Console.WriteLine("Main Thread End...");
    }



    static void write()
    {
        while (true)
        {

            System.Console.Write(Thread.CurrentThread.Name);
            Thread.Sleep(500);
        }
    }

    static void createThread()
    {
        Random rnd = new Random();

        while (count<=5)
        {

            Thread tt = new Thread(write);

            if (rnd.Next(0,10)>=5)
            {
                tt.Priority = ThreadPriority.Highest;
            }
            else
            {

                tt.Priority = ThreadPriority.Lowest;
            }



            tt.Name = count.ToString();
            lst.Add(tt);
            count++;
        }



    }

}
类程序
{
静态列表lst=新列表();
//静态螺纹t;
静态整数计数=1;
静态void Main(字符串[]参数)
{
System.Console.Title=“线程测试”;
createThread();
foreach(lst中的线程t)t.Start();
//System.Console.WriteLine(“主线程端…”);
}
静态void write()
{
while(true)
{
System.Console.Write(Thread.CurrentThread.Name);
睡眠(500);
}
}
静态void createThread()
{
随机rnd=新随机();
而(计数=5)
{
tt.Priority=ThreadPriority.Highest;
}
其他的
{
tt.Priority=ThreadPriority.lower;
}
tt.Name=count.ToString();
第一次增补(tt);
计数++;
}
}
}

在wait()方法中放置一个断点,在write(object o)方法中放置一个断点。在附加调试程序的情况下运行,并观察发生的情况。你应该很快就能找到原因。或者更直截了当地说:你错过了一个循环。如果只调用一次
ReadKey()
,您认为您的程序可以从用户那里获得多少键值?(我不知道为什么人们因为缺少MCVE而投票关闭;代码示例很好,事实上这本质上是一个印刷错误,使问题无法进入主题)。