C# 控制台关闭回调函数,修改(防止被自动优化)

原创
2019/03/21 18:39
阅读数 1.5K

通过IL发现代码被优化

#region kernel32
//委托
private delegate int ConsoleCtrlDelegate(int CtrlType);
//winApi
[DllImport("kernel32.dll")]
private static extern int SetConsoleCtrlHandler(ConsoleCtrlDelegate ctrlDelegate, int Add);
//volatile static 变量防止优化
volatile static ConsoleCtrlDelegate consoleCtrlDelegate = new ConsoleCtrlDelegate(HandlerRoutine);
#endregion

static void Main(string[] args)
{
    int isSuccess = SetConsoleCtrlHandler(consoleCtrlDelegate, 1);
    //......
}

/// <summary>
/// 释放Service资源
/// </summary>
/// <param name="ctrlType"></param>
/// <returns></returns>
private static int HandlerRoutine(int ctrlType)
{
    switch (ctrlType)
    {
        case 0:
            dispose();
            break;
        case 2:
            dispose();
            break;
    }
    return 0;
}
展开阅读全文
0
0 收藏
分享
加载中
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部