给枯燥的 .Net 命令行控制台程序来点儿心跳 (关于退格键[\b]使用的奇技淫巧,见笑)

王朝c#·作者佚名  2006-01-09
宽屏版  字体: |||超大  

/*

给枯燥的 .Net 命令行控制台程序来点儿心跳(关于退格[\b]的使用)

雕虫小技 见笑

Java 同理

*/

public class Class1

{

public static bool b;

static void Main(string[] args)

{

System.Console.WriteLine("测试1: 直接等待 n = 199 次循环");

Wait(199);

System.Console.WriteLine("\n\n测试2: 等待结束条件: b == true");

// 主程序 开始

b = false;

new System.Threading.Thread(new System.Threading.ThreadStart(DoWait)).Start(); //监视线程: 显示滚动计数器

//以下是耗时的主程序

System.Threading.Thread.Sleep(5 * 1000); //主程序耗时 5 秒

b = true; //主程序 结束

System.Console.WriteLine("\n主程序耗时 5 秒");

}

private static void Wait(int Count)

{

System.Console.Write("在进行第 ");

string bs = ""; //用于记录上次的位数

for (int i = 0; i < Count + 1; i++)

{

System.Threading.Thread.Sleep(10); // 10/1000 second

System.Console.Write(bs + "\b\b\b" + i + " 次," + System.DateTime.Now);

bs = new string('\b',Digits(i) + 19 + 1); //19 为日期时间字符串长度, 1 是 ","

}

}

private static void DoWait()

{

Wait(ref b); //由委托调用的真正函数

}

private static void Wait(ref bool Flag) //Flag 可在其他线程改

{

System.Console.Write("在进行第 ");

int i = 0;

string bs = "";

while (!Flag)

{

//System.Threading.Thread.Sleep(1000); // 1 second

System.Console.Write(bs + "\b\b\b" + i + " 次," + System.DateTime.Now);

bs = new string('\b',Digits(i) + 19 + 1); //19 为日期时间字符串长度, 1 是 ","

i ++;

}

}

static int Digits(int n) //数字所占位数

{

n = System.Math.Abs(n) ;

n = n/10;

int i = 1;

while (n > 0)

{

n = n / 10;

i++;

}

return i;

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有