我有一个使用.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中尝试了异常设置,检查了所有要打破的异常。
答案 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();
}