WPF编程,通过控制台Console输出过程信息的一种方法。

tech2025-06-22  1

方法一

1、在WPF项目中增加一个新的类文件,粘贴如下代码:

public static class ConsoleManager { private const string Kernel32_DllName = "kernel32.dll"; [DllImport(Kernel32_DllName)] private static extern bool AllocConsole(); [DllImport(Kernel32_DllName)] private static extern bool FreeConsole(); [DllImport(Kernel32_DllName)] private static extern IntPtr GetConsoleWindow(); [DllImport(Kernel32_DllName)] private static extern int GetConsoleOutputCP(); public static bool HasConsole { get { return GetConsoleWindow() != IntPtr.Zero; } } /// Creates a new console instance if the process is not attached to a console already. public static void Show() { #if DEBUG if (!HasConsole) { AllocConsole(); InvalidateOutAndError(); } #endif } /// If the process has a console attached to it, it will be detached and no longer visible. Writing to the System.Console is still possible, but no output will be shown. public static void Hide() { #if DEBUG if (HasConsole) { SetOutAndErrorNull(); FreeConsole(); } #endif } public static void Toggle() { if (HasConsole) { Hide(); } else { Show(); } } static void InvalidateOutAndError() { Type type = typeof(System.Console); System.Reflection.FieldInfo _out = type.GetField("_out", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic); System.Reflection.FieldInfo _error = type.GetField("_error", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic); System.Reflection.MethodInfo _InitializeStdOutError = type.GetMethod("InitializeStdOutError", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic); Debug.Assert(_out != null); Debug.Assert(_error != null); Debug.Assert(_InitializeStdOutError != null); _out.SetValue(null, null); _error.SetValue(null, null); _InitializeStdOutError.Invoke(null, new object[] { true }); } static void SetOutAndErrorNull() { Console.SetOut(TextWriter.Null); Console.SetError(TextWriter.Null); } }

2、调用

private void Button_Click(object sender, RoutedEventArgs e) { ConsoleManager.Show();//打开控制台窗口 Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("这是测试信息"); }

3、更改项目属性

右击项目,在应用程序选项卡中暂时切换输出类型为:控制台应用程序

4、运行效果

方法二:使用Trace

1、直接使用Trace

private void Button_Click(object sender, RoutedEventArgs e) { Trace.WriteLine("这是测试信息"); }

2、效果

最新回复(0)