接收关闭消息,并以log形式输出至文件。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleTest
{
class Program
{
/// <summary>
/// console控制台,关闭消息接收示例;
/// 点击console窗体上的关闭按钮,或 Ctrl + C
/// </summary>
static void Main(string[] args)
{
bool result = ConsoleMsg.SetHandler(HandleF, true);
//Console.WriteLine("设置系统消息接收函数结果 -> " + result);
Console.ReadLine();
}
/// <summary>
/// 用于处理系统消息的函数
/// </summary>
/// <param name="msg">系统消息</param>
/// <returns>对系统消息的处理结果</returns>
private static bool HandleF(int msg)
{
String str = "接收到console控制台消息-> " + msg;
WriteLog(str);
return false;
}
private static Object writeLock = new object();
/// <summary>
/// 输出运行log信息
/// </summary>
/// <param name="text"></param>
private static void WriteLog(string text)
{
lock (writeLock)
{
System.IO.File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + "log.txt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + text + "\r\n");
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
namespace ConsoleTest
{
/// <summary>
/// console控制台消息接收。
/// 添加消息处理:SetHandler(F,true)
/// 移除消息处理:SetHandler(F,false)
/// </summary>
public class ConsoleMsg
{
[DllImport("kernel32.dll")]
private static extern bool SetConsoleCtrlHandler(Handler handFunc, bool Add);
/// <summary>
/// 委托方法申明,用于处理系统消息处。
/// </summary>
/// <param name="sysMSG">接收到的系统消息</param>
/// <returns>对系统消息的处理结果</returns>
public delegate bool Handler(int sysMSG);
/// <summary>
/// 设置console控制台消息接收处理函数。
/// 当发生系统事件时,会调用handFunc函数。
/// </summary>
/// <param name="handFunc">用于处理系统消息的函数</param>
/// <param name="add">添加 或 删除,消息处理函数</param>
/// <returns>设置是否成功</returns>
public static bool SetHandler(Handler handFunc, bool add)
{
bool result = SetConsoleCtrlHandler(handFunc, add);
Console.Read();
return result;
}
}
}