c# - .Net 控制台应用程序在后台运行

标签 c# .net background console

我需要让我的控制台应用程序在后台运行。互联网上有一些关于如何实现这一点的提示。

最快的提示是将项目类型更改为 Windows 应用程序。

我试过了,是的,它确实让控制台窗口消失了,但有一个问题。我的应用程序使用计时器每 x 秒处理一次,因此在 Main 函数的末尾,我放置了一个 Console.ReadLine 以防止应用程序停止。但是通过将项目类型切换为 Windows 窗体应用程序,Console.ReadLine 不会再阻止应用程序完成。

所以我必须使用名为 ShowWindow() 的 Windows 32 API 函数来隐藏控制台窗口。

我的问题是,如果我坚持将项目类型更改为 Windows Form Application 的选项,我需要什么才能让它保持事件状态?

最佳答案

不要使用计时器,创建一个Windows 服务应用程序
不要使用 ShowWindowConsole.ReadLine()、WinForms 等——这听起来像是一个糟糕的应用程序设计。

通过编写这样一个简单的类:

public class MyService : ServiceBase
{
    private readonly TimeSpan TimerInterval = TimeSpan.FromSeconds(5); // 'x' seconds here
    private Timer _timer; // System.Threading.Timer

    protected override void OnStart(string[] args)
    {
        _timer = new Timer(TimerCallback, null, TimeSpan.Zero, TimerInterval);
    }

    private void TimerCallback(object state)
    {
        // do whatever you want here,
        // process your requests etc.

        // this method will fire every x seconds while service is running
    }

    protected override void OnStop()
    {
        _timer.Dispose();
    }
}

您将拥有一个 Windows 服务应用程序,它:

  • 可以轻松安装、禁用、启动/重新启动/停止
  • 可以配置为失败后自动恢复
  • 可以作为不同的用户甚至本地系统帐户运行
  • 在后台运行,即使没有用户登录
  • 自行无限运行,无需使用 Console.ReadLine()Thread.Sleep
  • 没有 GUI\控制台窗口,没有使用 ShowWindow 拐杖

这正是 Windows 服务的设计目的。

关于c# - .Net 控制台应用程序在后台运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49849438/

相关文章:

c# - 从字符串末尾子字符串

android - Android:更改背景颜色后,声音应用崩溃

c# - 从移动服务表获取数据

c# - 单元测试与集成测试 : Entity Framework Core In memory

C# string.Replace 用于删除 �?

iphone - 从后台操作调用导航 Controller 方法

android - 后台 Android 应用程序可以截取当前 Activity 屏幕的屏幕截图吗?

c# - 以编程方式定义 DataGridView 列类型

c# - 在 c# winform 应用程序中使用安装的字体时出现问题

c# - Process.Start 是否在父程序终止时终止子程序?