【发布时间】:2017-05-06 21:20:10
【问题描述】:
我想在控制台的不同位置显示消息,但是当我尝试将光标位置设置为左 50、前 60 时,它在打印'A'、'B'之前发生了变化,因为还有另一个线程“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");
}
【问题讨论】:
-
你到底想在这里完成什么?
-
我想在控制台的不同位置显示消息,但是当我尝试将光标位置设置为 50,60 时,它在打印'A','B'之前发生了变化,因为还有另一个线程也在不同位置的控制台上显示消息。我想当 Man() 设置光标位置时,没有其他线程会改变它。
-
您似乎将 CursorLeft 的位置更改了两次(先设置为 50,然后设置为 60),这可能是问题的根源吗?
-
不不,这是拼写错误,抱歉。真正的问题是 Thread th = new Thread(() => new Program().Hello(50, 60));它正在改变光标的位置。一旦主线程访问它的属性,我想锁定控制台类,所以没有其他人访问它
标签: c# multithreading locking