C#代码执行无一例外地停止

时间:2019-07-14 08:18:20

标签: c#

我有一个使用.NET Framework 4.7.2和Colorful.Console 1.2.6的C#控制台应用程序(我从1.2.9降级了,因为我有一个使用1.2.6的项目都可以正常工作)。
我有用于记录的此类:

static class Log
{
    public enum LogLevel { INFO = 0, WARNING = 1, ERROR = 2, VERBOSE = 3 }
    private static void log(LogLevel logLevel, string msg)
    {
        Color[] colors = { Color.Cyan, Color.Orange, Color.Red, Color.LimeGreen };
        Console.WriteLineFormatted($"[{DateTime.Now.ToString("hh:mm:ss")}][{logLevel.ToString()}] {{0}}", Color.Yellow, new Formatter(msg, colors[(int)logLevel]));
    }

    public static void i(string msg)
    {
        log(LogLevel.INFO, msg);
    }
    public static void w(string msg)
    {
        log(LogLevel.WARNING, msg);
    }
    public static void e(string msg)
    {
        log(LogLevel.ERROR, msg);
    }
    public static void v(string msg)
    {
        log(LogLevel.VERBOSE, msg);
    }
}

当我使用Log#i方法中的Program#Main时,它可以正常工作,但是如果我从另一个调用中调用Log#i,它会显示该行,并且程序会完全停止而不会出错(并且不会)崩溃),位于

Console.WriteLineFormatted($"[{DateTime.Now.ToString("hh:mm:ss")}][{logLevel.ToString()}] {{0}}", Color.Yellow, new Formatter(msg, colors[(int)logLevel]));

行,应用程序停止响应(但没有将其写在标题栏中)。
该程序如下所示:

class Program
{
    private static OverlayForm overlayForm;
    static void Main(string[] args)
    {
        Log.i("A");
        Log.i("B");

        overlayForm = new OverlayForm();
    }
}

internal class OverlayForm : Form
{
    public OverlayForm()
    {
        Log.i("AA");
        Log.i("BB");
    }
}

输出是这样的

[10:12:36][INFO] A 
[10:12:36][INFO] B 
[10:12:36][INFO] AA

我已经尝试过将上述行包装在try catch块中,但是没有区别,我还在VS2019中尝试了异常设置,检查了所有要打破的异常。

1 个答案:

答案 0 :(得分:0)

如果您是从单个线程写到控制台,则尝试改用此命令:

private static void log(LogLevel logLevel, string msg)
    {
        ConsoleColor[] colors = { ConsoleColor.Cyan, ConsoleColor.Yellow, ConsoleColor.Red, ConsoleColor.Green };

        Console.ForegroundColor = colors[(int)logLevel];
        Console.WriteLine("[{0}][{1}] {2}", DateTime.Now.ToString("hh:mm:ss"), logLevel, msg);
        Console.ResetColor();
    }