主题:[讨论]闲来无事写了个小程序,可以运行的结果和我想要的不同!来看看
liwencocolee
[专家分:670] 发布于 2006-06-08 22:34:00
public static void aa()
{
ThreadStart worker=new ThreadStart(WorkerForMe);
Thread t=new Thread(worker);
t.Start();
for(int i=0;i <= 60;i++)
{
if(i <= 60)
{
Console.WriteLine(i);
Thread.Sleep(1000);
//Console.Clear();
}
else
{
t.Abort();
}
}
Console.ReadLine();
我想要的结果是在输出一个数字累加的效果,但是却变成了输出所有的结果.该怎么实现象跳动的秒钟那样的效果?我想过一种办法,那就是清屏,但是不是怎么写.大家有什么办法,一起讨论讨论.
回复列表 (共6个回复)
沙发
biggates [专家分:140] 发布于 2006-06-09 00:10:00
就像原来的\r那样?
板凳
cipc [专家分:2280] 发布于 2006-06-09 08:49:00
呵呵~~~刚好,前面也有人说怎么清屏问题,有种方法是用\b,我就找了一个关于用API函数来清屏,正准备发的时候才发现已结了。那我就不好意思一下发到这边来喽。
namespace ClsConsoleApplication
{
// 更好玩的是你还可以调用API FillConsoleOutputAttribute函数来设置屏幕上显示的颜色。
using System;
using System.Runtime.InteropServices;
class Program
{
static void Main(string[] args)
{
Console.Write("Text!\nPlease Input \"y\" or \"n\": ");
string strInput = string.Empty;
strInput = Console.ReadLine();
if (strInput.ToLower() == "y")
{
Console.WriteLine("Cls \"Text\" character.");
int writted = 0;
IntPtr m_hCon = GetStdHandle(-11);
COORD start = new COORD();
start.x = start.y = 0;
FillConsoleOutputCharacter(m_hCon, ' ', 1 * 4, start, ref writted);
//FillConsoleOutputAttribute(m_hCon,
Console.WriteLine("Cls Success");
}
else
{
Console.WriteLine("Cls Unsuccess");
}
Console.ReadLine();
}
[StructLayout(LayoutKind.Sequential)]
internal struct COORD
{
internal short x, y;
}
/// <summary>
/// 获取标准输出的句柄。
/// -10 这是标准输入
/// -11 这是标准输出
/// -12 这是标准错误
/// </summary>
/// <param name="nStdHandle">标准句柄代号</param>
/// <returns></returns>
[DllImport("KERNEL32", SetLastError = true)]
internal extern static IntPtr GetStdHandle(int nStdHandle);
/// <summary>
/// 调用API函数在屏幕上显示相应字符(不知道这样解释对不对)
/// </summary>
/// <param name="Handle">可用GetStdHandle()获取</param>
/// <param name="uChar">要输出的字符</param>
/// <param name="Len">长度是按 长*宽 来算的</param>
/// <param name="start">从哪开始</param>
/// <param name="writted">写入到屏幕缓存</param>
/// <returns></returns>
[DllImport("KERNEL32", SetLastError = true)]
internal extern static bool FillConsoleOutputCharacter(IntPtr Handle, char uChar, int Len, COORD start, ref int writted);
}
}
3 楼
jzyray [专家分:20610] 发布于 2006-06-09 08:51:00
试试这个:
public static void aa()
{
ThreadStart worker=new ThreadStart(WorkerForMe);
Thread t=new Thread(worker);
t.Start();
string output;
for(int i=0;i <= 60;i++)
{
if(i <= 60)
{
output=i.ToString();
Console.Write(output);
Thread.Sleep(1000);
Console.Write(new string('\b',output.Length));
//Console.Clear();
}
else
{
t.Abort();
}
}
Console.ReadLine();
4 楼
jzyray [专家分:20610] 发布于 2006-06-09 08:55:00
和2楼发的时间蛮近的……
使用API也好,使用'\b'也好,中心思路就是清掉那一部分内容
5 楼
cipc [专家分:2280] 发布于 2006-06-09 09:22:00
呵呵
6 楼
zhoubbss [专家分:0] 发布于 2006-06-09 16:47:00
不错当秒钟计时用....
我来回复