栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

WPF应用程序没有输出到控制台吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

WPF应用程序没有输出到控制台吗?

在实际调用任何Console.Write方法之前,您必须手动创建一个Console窗口。这将使控制台正常运行,而无需更改项目类型(WPF应用程序将无法使用)。

这是一个完整的源代码示例,它说明ConsoleManager类的外观,以及如何使用它来启用/禁用控制台,而与项目类型无关。

在下面的类中,您只需要

ConsoleManager.Show()
在调用
Console.Write

[SuppressUnmanagedCodeSecurity]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; }    }    /// <summary>    /// Creates a new console instance if the process is not attached to a console already.    /// </summary>    public static void Show()    {        //#if DEBUG        if (!HasConsole)        { AllocConsole(); InvalidateOutAndError();        }        //#endif    }    /// <summary>    /// 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.    /// </summary>    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);    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/395425.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号