System.Threading.Thread.Sleep() 单击一行时冻结我的代码
System.Threading.Thread.Sleep() freezes my code when clicking on a line
我创造了一种为游戏慢慢写文字的方法。
问题是,当方法是 运行 并且我 select 在 cmd window 中使用鼠标时,整个程序冻结,当我按 Esc 键时它继续。有什么我可以做的,所以它不会发生吗?我可以使用不同于 System.Threading.Thread.Sleep()
的东西让我的程序等待吗?
static void slowly(string sen)
{
for (int j=0; j<sen.Length-1; j++)
{
Console.Write(sen[j]);
System.Threading.Thread.Sleep(100);
}
Console.WriteLine(sen[sen.Length-1]);
System.Threading.Thread.Sleep(100);
}
static void slowly(string sen)
{
var thread = new System.Threading.Thread(() => {
for (int j=0; j<sen.Length-1; j++)
{
System.Console.Write(sen[j]);
System.Threading.Thread.Sleep(100);
}
System.Console.Write(sen[sen.Length-1]);
System.Threading.Thread.Sleep(100);
});
thread.Start();
}
问题是您的睡眠代码是 运行ning 在您应用程序的 "Main Thread" 上。这意味着您的应用程序在 .slowly() 方法中实际上不能做任何其他事情。
您需要做一些类似于@vidstige 显示的事情,即在另一个(辅助)线程中使用您的 .slowly() 方法 运行。
更现代的方法是:
static async Task slowly(string sen)
{
await Task.Run(() =>
{
for (int j = 0; j < sen.Length - 1; j++)
{
Console.Write(sen[j]);
System.Threading.Thread.Sleep(100);
}
Console.WriteLine(sen[sen.Length - 1]);
System.Threading.Thread.Sleep(100);
});
}
public static void Main(string[] args)
{
var slowlyTask = slowly("hello world");
//do stuff while writing to the screen
var i = 0;
i++;
//wait for text to finish writing before doing somethign else
slowlyTask.Wait();
//do another something after it's done;
var newSlowlyTask = slowly("goodbye");
newSlowlyTask.Wait();
}
PS:这个问题的负面回答数量令人失望:(
我创造了一种为游戏慢慢写文字的方法。
问题是,当方法是 运行 并且我 select 在 cmd window 中使用鼠标时,整个程序冻结,当我按 Esc 键时它继续。有什么我可以做的,所以它不会发生吗?我可以使用不同于 System.Threading.Thread.Sleep()
的东西让我的程序等待吗?
static void slowly(string sen)
{
for (int j=0; j<sen.Length-1; j++)
{
Console.Write(sen[j]);
System.Threading.Thread.Sleep(100);
}
Console.WriteLine(sen[sen.Length-1]);
System.Threading.Thread.Sleep(100);
}
static void slowly(string sen)
{
var thread = new System.Threading.Thread(() => {
for (int j=0; j<sen.Length-1; j++)
{
System.Console.Write(sen[j]);
System.Threading.Thread.Sleep(100);
}
System.Console.Write(sen[sen.Length-1]);
System.Threading.Thread.Sleep(100);
});
thread.Start();
}
问题是您的睡眠代码是 运行ning 在您应用程序的 "Main Thread" 上。这意味着您的应用程序在 .slowly() 方法中实际上不能做任何其他事情。
您需要做一些类似于@vidstige 显示的事情,即在另一个(辅助)线程中使用您的 .slowly() 方法 运行。
更现代的方法是:
static async Task slowly(string sen)
{
await Task.Run(() =>
{
for (int j = 0; j < sen.Length - 1; j++)
{
Console.Write(sen[j]);
System.Threading.Thread.Sleep(100);
}
Console.WriteLine(sen[sen.Length - 1]);
System.Threading.Thread.Sleep(100);
});
}
public static void Main(string[] args)
{
var slowlyTask = slowly("hello world");
//do stuff while writing to the screen
var i = 0;
i++;
//wait for text to finish writing before doing somethign else
slowlyTask.Wait();
//do another something after it's done;
var newSlowlyTask = slowly("goodbye");
newSlowlyTask.Wait();
}
PS:这个问题的负面回答数量令人失望:(