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而投票关闭;代码示例很好,事实上这本质上是一个印刷错误,使问题无法进入主题)。