在C#中,在Console中的方法中创建线程失败

本文关键字:创建 线程 方法 失败 Console | 更新日期: 2023-09-27 18:22:08

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

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++;
        }
    }

在C#中,在Console中的方法中创建线程失败

也许您想要递归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++;
        }

    }
}