我创建了一种慢慢为游戏编写文本的方法。
问题是,当方法运行并且我在cmd窗口中选择了鼠标时,整个程序会冻结,当我按下escape时它会继续。有什么我可以做的,所以它不会发生吗?我可以使用与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);
}
答案 0 :(得分:2)
问题是您的睡眠代码正在&#34;主线程&#34;你的申请。这意味着您的应用程序在.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:对这个问题的否定回答数量令人失望:(
答案 1 :(得分:0)
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();
}