这就是我现在打开控制台窗口的方式:
private static void Main(string[] args)
{
// Timers run here
while(true)
{
Console.Read();
}
}
但它总是回到我身边:必须有更好的方法。 Console.Read()
处于永恒while
的原因是因为我不想让我的程序终止,如果我错误地按enter
而它正在运行而我#&# 39; m专注于它的窗口。
有什么想法吗?
不回答我的问题的相关问题:
答案 0 :(得分:4)
我假设您想在后台运行任务,因此您应该启动一个线程,如下所示:
private static void Main(string[] args)
{
new Thread(new ThreadStart(SomeThreadFunction)).Start();
while(true)
{
Console.Read();
}
}
static void SomeThreadFunction()
{
while(true) {
Console.WriteLine("Tick");
Thread.Sleep(1000);
}
}
答案 1 :(得分:4)
鉴于到目前为止评论中的讨论,我的第一个建议肯定是为此创建一个System Tray application。这将允许用户交互和通知,而无需在桌面上保留控制台窗口。
如果失败了,你可以在控制台中实现类似“游戏循环”的东西。统计数据需要“实时”吗?可能会延迟一秒?像这样:
while (true)
{
Thread.Sleep(1000);
DisplayCurrentStats();
}
这会暂停主线程(不总是推荐,但是 你试图在这里保持打开的UI),然后每秒输出一次显示。 (如果输出已由其他内容处理,并且由于任何原因不应在此处移动,请忽略该部分。)
你可能仍然希望某些方式突破整个事情。也许是逃避输入:
while (true)
{
Thread.Sleep(1000);
DisplayCurrentStats();
var escape = Console.Read();
if (IsEscapeCharacter(escape))
break;
}
OutputGoodByeMessage();
在IsEscapeCharacter()
方法中,您可以检查从控制台读取的字符(如果有的话)是否与预期的“转义”字符匹配。 (esc
键似乎是一个标准选择,但为了模糊,你可以使用其他任何东西来试图防止“意外逃脱”。)这将允许你在需要时干净地终止应用程序。
它仍然以1秒的延迟增量,这是不理想的。虽然即使只有1/10秒,它仍然会花费大部分时间休眠(即,不消耗计算资源),同时提供一些体面的UI响应(抱怨大约1/10秒)延迟):
Thread.Sleep(100);
答案 2 :(得分:1)
我不希望我的程序终止,如果我误按了回车
你想要一些与此相似的东西:
while (Console.ReadKey(true).Key == ConsoleKey.Enter)
{
Console.Read();
}
如果按ENTER键,上面的代码不会退出,但是当你按任意一个键时它会退出。