我想在控制台的不同位置显示消息,但是当我尝试将光标位置设置为左侧50,前60时,它会在打印之前进行更改' A'' B& #39;因为还有另一个线程" th"这也是在不同位置的控制台上显示消息。所以它也访问左侧和顶部的光标属性。 我想当Man()函数设置光标位置时,那时没有其他线程会改变它。
static void Main(string[] args)
{
Thread th = new Thread(() => new Program().Hello(50, 60));
th.Start();
new Program().Man();
}
public void Hello(int left, int top)
{
int i = 0;
Console.CursorLeft = left; Console.CursorTop = top;
Console.ForegroundColor = ConsoleColor.DarkGreen;`
Console.Write("Processing");
while (true)
{
i = 0;
Console.ForegroundColor = ConsoleColor.DarkGreen;
while (i < 20)
{
Console.Write("*");
i++;
}
Console.ForegroundColor = ConsoleColor.Black;
Console.Write("********************");
}
}
public void Man()
{
Console.CursorLeft = 50;
Console.CursorTop = 60;
Console.Write("A");
Console.Write("B");
Console.Write("C");
Console.Write("D");
}
答案 0 :(得分:3)
您的代码的问题是您通过“this”保留字锁定实例。由于您正在创建两个Program类实例,因此“this”将引用两个不同的对象,因此无法保留一段代码,而其他代码已经在内部。
解决此问题的一种方法是锁定静态对象。
更好的方法是优化代码。