最近写了一个随机模拟的计算程序,因为计算耗时很长,所以运算中要输出一些信息,以方便用户随时了解运算的进度以及其他信息。因此作者使用控制台作为输出窗口,小小技巧也是一种比较方便的方法。
最初打算写一个log窗口类,使用textbox控件以及 progressbar,后来发现挺麻烦,远不及console窗口下的console.write和console.writeline方便。于是尝试直接将信息输出到控制台窗口。
1、 在winform程序中调用console窗口。这个使用Win32 API来完成。关于AllocConsole函数和FreeConsole函数的详细信息可以参见这里和这里。VB.NET的代码如下:
Form程序调用和释放Console窗口 1 Public Class ConsoleHelperClass ConsoleHelper 2 ‘调用控制台窗口 3 _ 4 Public Shared Function AllocConsole()Function AllocConsole() As Boolean 5 End Function 6 7 ’释放控制台窗口 8 _ 9 Public Shared Function FreeConsole()Function FreeConsole() As Boolean 10 End Function 11 End Class
在调用AllocConsole后,就将console窗口调配给当前进程使用,在当前进程的任何位置我们都可以 使用console.write和console.writeline函数进行程序信息的输出了。 |
2、 console窗口下绘制一个进度条。
;1' 先绘制出进度条的底色。 2 Private Sub Init()Sub Init() 3 Console.WriteLine(”开始计算:” & Date.Now.ToLongDateString & Date.Now.ToLongTimeString) 4 ‘绘制一个进度条背景 5 Console.BackgroundColor = ConsoleColor.DarkCyan 6 For i As Integer = 0 To 99 7 Console.Write(” “) 8 Next 9 Console.BackgroundColor = ConsoleColor.Black 10 Console.WriteLine() 11 End Sub 12 13' 2.b 根据计算线程的进度绘制进度条 14 Dim SumProg as Integer 15 Private Sub DrawProgressBar()Sub DrawProgressBar 16 SumProg += 1 17 Console.Write(”{0}%”, SumProg) 18 Console.SetCursorPosition(0, Console.CursorTop - 1) 19 Console.BackgroundColor = ConsoleColor.Yellow 20 For p As Integer = 0 To SumProg - 1 21 Console.Write(” “) 22 Next 23 Console.BackgroundColor = ConsoleColor.Black 24 Console.WriteLine() 25 End Sub |
下面是一张效果截图。
【编辑推荐】
- C#在WinForm开发中Label换行方法
- C#中使用多线程访问Winform问题解决方案
- 体验VS.NET 2005的winform新功能