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

本文关键字:进程 选项 运行 控制台 我的 应用程序 长时间 | 更新日期: 2023-09-27 18:19:36

我正在开发一个控制台应用程序,它启动了一个相当长的运行过程(2-3分钟)。哪些选项可用于显示进度,甚至只是写一个"每隔几秒钟屏幕一次,让用户知道应用程序没有停止响应?

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

你(至少)有三种方法可以做到这一点:

  • 最简单的方法:在程序启动时,将全局变量设置为false,然后启动一个向控制台写入点的线程,thread.Sleep()会在一秒钟内重复,直到变量设置为true。在主线程上完成工作,完成后将变量设置为true,然后连接()另一个线程
  • 仍然很简单:在混合中添加另一个全局变量,键入int。在您的工作线程中,每当取得一些进展时,增加它,在控制台编写器线程上,将间隔减少到250毫秒,但只有在进度计数器发生变化时才画一个点。这可以让您了解应用程序的进展速度
  • 有点高级:像第一步一样创建一个布尔值加上一个AutoResetEvent,让控制台编写器线程在应用程序进行Set()事件时重复等待该事件。完成后,将boolean设置为true,并在Join()ing之前再次设置set()。这方面的高级部分是知道,在哪些部分报告进展情况

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

但这种方法可能会导致太多的信息(太多的字符进入控制台)或太少的信息,因为您钩住了一些并没有真正责任的代码。

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

根据用户的性质,另一种选择是使用类似NLog的日志框架。这样,您的实现是独立于UI的,您可以在控制台的运行时,从另一台机器,或者其他任何机器,或多或少地看到发生了什么。