WPF应用程序显示控制台

2016-09-28 08:03:11来源:CSDN作者:hxfhq1314人点击

注意
WPF应用程序默认情况下是不会显示控制台的,有时候我们却有着样子的需求想要显示控制台,因此以下是一种解决方法:
首先
新建一个WPF应用程序,默认有个叫做MainWindow的xaml文件及MainWindow类。
然后
新建一个类,重新命名自己的名称空间,如下:

namespace MyWPFApplication{    /// <summary>    /// Interaction logic for App.xaml    /// </summary>    public partial class App : Application    {    }     class Startup      {          /// <summary>          /// 应用程序的主入口点。          /// </summary>          [STAThread]          static void Main(string[] args)          {                            ConsoleManager.Toggle();              System.Console.WriteLine("111");            App app = new App();             MainWindow windows = new MainWindow();              app.MainWindow = windows;              app.Run(new MainWindow());              Console.ReadKey();        }      }    public class WindowWrapper    {        private App app;        public void ShowMainWindow()        {            app = new App();        }    }    [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);        }        static void SetOut(string A)        {        }    }}

最后
如果这个时候运行程序,会报错,提示什么“has more than one entry point defined”也就是说有多个该程序有多个Main函数,这是应用程序中的App.xml文件中有这么一句话:StartupUri=”MainWindow.xaml”>,也就是说应用程序直接从MainWindow开始的,因此我们需要从我们自己定义的Main的地方开始,这就需要更改程序的入口点。解决方法就是:右键->项目属性->Application->Startup Object的下拉框选择上面定义的名成空间.包含Main函数的类名上面的例子的话就是MyWPFApplication.Startup。
默认情况下就是你的项目名称.App,也就是上面说的App.xml指定的MainWindow开始。

运行程序,你就可以看到控制台窗口了。

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台