对于C#控制台应用程序中的长时间运行流程,我有哪些选项?

时间:2012-01-07 00:39:37

标签: c# .net console

我正在开发一个控制台应用程序,它启动了一个相当长时间的运行过程(2-3分钟)。有哪些选项可用于显示进度,甚至只是写一个“。”每隔几秒进行一次屏幕,以便用户知道应用程序没有停止响应?我是桌面开发的新手,所以请耐心等待。谢谢!

2 个答案:

答案 0 :(得分:1)

你有(至少)3种方法:

  • 最简单:在程序启动时,将全局变量设置为false,然后启动一个将点写入控制台的线程,Thread.Sleep()s一秒钟,重复直到该变量设置为true。在你的主线程上完成你的工作,完成后将变量设置为true,然后将Join()设置为另一个线程。
  • 还很简单:在mix中添加另一个全局变量,输入int。在您的工作线程中,每当进行一些进展时,在控制台编写器线程减少间隔减去250毫秒,但仅在进度计数器已更改时绘制点。这可以让您了解应用程序的进展速度
  • 有点高级:在第一步加上AutoResetEvent创建一个布尔值,让控制台编写器线程重复等待事件,当app进行进度时Set()事件。完成后,在Join()之前将boolean设置为true并再次设置Set()。其中的高级部分是知道报告进展的部分。

答案 1 :(得分:0)

最简单的方法是,如果您的应用程序具有增量循环,那么您可以在控制台上放置一个简单的句点。不好,但它确实表明“我还活着”。

但是这种方法可能导致过多的信息(太多的字符进入控制台)或者太少,因为你会陷入一些没有真正负责的代码。

所以,也许你可以重用的更好的方法是创建一个在1秒钟内打勾的线程中运行的控制台用户类。它可以使用退格和好旧| / | / - 序列给人一种旋转的印象。它还可以检查按键以允许用户退出。

根据用户的性质,另一个选择是使用 NLog 等日志框架。这样,您的实现是独立于UI的,您可以在运行时在控制台中,从另一台计算机上查看或多或少的详细信息。