C#控制台应用自动隐藏后台进程运行
简介
本文主要讲述C#控制台应用如何自动隐藏以后台进程运行。
方法一:通过ShowWindow方法隐藏控制台窗体;
方法二:将控制台应用转为Windows应用程序后台运行(推荐);
方法一:通过ShowWindow方法隐藏控制台窗体
1、在Visual Studio中创建C#控制台应用ConsoleApp3;
2、Program.cs添加引用;
using System.Diagnostics;
3、在Main方法上方添加dll引用ShowWindow方法
[DllImport("user32.dll", EntryPoint = "ShowWindow", SetLastError = true)]
private static extern bool ShowWindow(IntPtr hWnd, uint nCmdShow);
4、Main方法中,添加隐藏当前进程窗体代码;
Process process = Process.GetCurrentProcess();
// 隐藏控制台窗体
ShowWindow(process.MainWindowHandle, 0);
启动控制台应用,窗体即会自动隐藏后台运行。
Program.cs完整代码如下:
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace ConsoleApp3
{
class Program
{
[DllImport("user32.dll", EntryPoint = "ShowWindow", SetLastError = true)]
private static extern bool ShowWindow(IntPtr hWnd, uint nCmdShow);
static void Main(string[] args)
{
Process process = Process.GetCurrentProcess();
// 隐藏控制台窗体
ShowWindow(process.MainWindowHandle, 0);
Console.WriteLine("Press Any key to exit...");
Console.ReadKey();
}
}
}
方法二:将控制台应用转为Windows应用程序后台运行(推荐)
1、在Visual Studio中选中项目--右键属性--应用程序--输出类型,将“控制台应用程序”修改为“Windows应用程序”。
2、调用_waitHandle.WaitOne()保持程序后台运行不自动退出。
对于控制台应用程序,想要保持程序不退出,可以使用Console.ReadKey()或Console.ReadLine()。
对于Windows应用程序,最简单可以使用while(true)保持程序不自动退出,但此方式比较消耗CPU。对于C#,我们可以使用专门控制信号的两个类AutoResetEvent和ManualResetEvent来使进程进入等待。
// 进入等待状态使应用不自动退出
EventWaitHandle _waitHandle = new AutoResetEvent(false);
while(true)
{
_waitHandle.WaitOne();
}
(1)循环中_waitHandle一直在等待,且不会占用CPU;
(2)事件发生时调用_waitHandle.Set(),就会执行WaitOne一次,执行完后再等待下一次Set被调用。
如果只需要程序保持后台运行,则直接调用_waitHandle.WaitOne()即可。
Program.cs完整代码如下:
using System.Threading;
namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
//TODO 业务逻辑
// 进入等待状态使应用不自动退出
EventWaitHandle _waitHandle = new AutoResetEvent(false);
while(true)
{
_waitHandle.WaitOne();
}
}
}
}
(完)