怎样写一个控制台倒计时程序 例如要输出以下信息:剩余时间:[n]秒其中[n]被实际时间替换,每隔1秒变一次,其他部分不变不能使用Console.Clear()方法全部清空再重新输出,因为在这个显示之前可能还有其他未知的信息。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 static void Main() { const int dueInSeconds = 30; DateTime dueTime = DateTime.Now + TimeSpan.FromSeconds(dueInSeconds); int top = Console.CursorTop, left = Console.CursorLeft; System.Threading.ThreadPool.QueueUserWorkItem(delegate(object o) { while (true) { TimeSpan remaining = dueTime - DateTime.Now; if (remaining.TotalSeconds <= 0) return; Console.SetCursorPosition(left, top); Console.Write(string.Format("Remaining seconds: {0,5}", (int)remaining.TotalSeconds)); System.Threading.Thread.Sleep(1000); } }); Console.ReadLine(); } 楼上的基本能解决问题,有个小问题,如果不是固定宽度(删除对齐5)Console.Write(string.Format("Remaining seconds: {0}", (int)remaining.TotalSeconds)); 当时间从10秒到9秒时,由于宽度变小,导致最后1位仍保持之前的数据(这里会显示成90,而不是9)有什么解决办法 http://topic.csdn.net/u/20090224/09/128c953f-10d7-49dd-ade6-086d962eb325.html using System;using System.Collections.Generic;using System.Text;namespace application1{ class TimeTest { static void Main() { DateTime topTime = DateTime.Now; int secondTime = 12; int row = Console.CursorTop; int column = Console.CursorLeft; Console.WriteLine(secondTime); while (secondTime > 0) { TimeSpan xx = (DateTime.Now - topTime); if (xx.TotalMilliseconds == 1000) { topTime = DateTime.Now; secondTime--; Console.SetCursorPosition(column, row); if (secondTime < 10) { Console.WriteLine("0"+secondTime.ToString()); Console.WriteLine("" + secondTime.ToString()); Console.WriteLine(" " + secondTime.ToString()); } else Console.WriteLine(secondTime); } } Console.ReadLine(); } }} System.Threading.Thread.Sleep(1000); 弱弱的问下 为什么挂起线程1秒 就不会出现那种闪烁的情况?????System.Threading.Thread.Sleep(改成越小);又有变化 是怎么回事?? Console.WriteLine(string.Format("Remaining seconds: {00}", (int)remaining.TotalSeconds)); for (int i = 60; i >=0; i--) { Console.Write(i); System.Threading.Thread.Sleep(1000); Console.Clear(); } 数据穿送 操作datagridview数据 请教 text显示问题(winform) 关于【异或】运算的一个小问题 請問如何讓我的水晶報表保存我的自定義紙張的設定。 关于Leave事件的问题 数据库问题 zedgraphcontrol显示Y轴对应点数值,急求啊! 文件下载的问题, 在线等 开发语言的取舍?????? 并发错误 写完程序了 要打包了,请教下打包的问题
{
const int dueInSeconds = 30;
DateTime dueTime = DateTime.Now + TimeSpan.FromSeconds(dueInSeconds);
int top = Console.CursorTop, left = Console.CursorLeft; System.Threading.ThreadPool.QueueUserWorkItem(delegate(object o)
{
while (true)
{
TimeSpan remaining = dueTime - DateTime.Now;
if (remaining.TotalSeconds <= 0) return; Console.SetCursorPosition(left, top);
Console.Write(string.Format("Remaining seconds: {0,5}", (int)remaining.TotalSeconds));
System.Threading.Thread.Sleep(1000);
}
});
Console.ReadLine();
}
Console.Write(string.Format("Remaining seconds: {0}", (int)remaining.TotalSeconds));
当时间从10秒到9秒时,由于宽度变小,导致最后1位仍保持之前的数据(这里会显示成90,而不是9)
有什么解决办法
using System.Collections.Generic;
using System.Text;namespace application1
{
class TimeTest
{
static void Main()
{
DateTime topTime = DateTime.Now;
int secondTime = 12;
int row = Console.CursorTop;
int column = Console.CursorLeft;
Console.WriteLine(secondTime);
while (secondTime > 0)
{
TimeSpan xx = (DateTime.Now - topTime);
if (xx.TotalMilliseconds == 1000)
{
topTime = DateTime.Now;
secondTime--;
Console.SetCursorPosition(column, row);
if (secondTime < 10)
{
Console.WriteLine("0"+secondTime.ToString());
Console.WriteLine("" + secondTime.ToString());
Console.WriteLine(" " + secondTime.ToString());
}
else
Console.WriteLine(secondTime);
}
}
Console.ReadLine(); }
}
}
为什么挂起线程1秒 就不会出现那种闪烁的情况?????
System.Threading.Thread.Sleep(改成越小);
又有变化 是怎么回事??
{ Console.Write(i);
System.Threading.Thread.Sleep(1000);
Console.Clear();
}