winform 运行中使用控制台动态输出调试及运行信息

来源:互联网 发布:mp3播放器推荐 知乎 编辑:程序博客网 时间:2024/06/02 12:28

如何:在 Winform 动态启动、控制台命令行?

需求
   winForm 程序输出类型为 windows 程序(不是命令行程序)
   在运行时想输入一些信息编译开发调试,如何实现这一功能

解答:
  AllocConsoleFreeConsole 这两个 API 可以在任何时候调用和关闭 命令行。

代码演示:
API 部分

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication1
{
    
public partial class NativeMethods {
    
        
/// <summary>
        
/// 启动控制台
        
/// </summary>
        
/// <returns></returns>
        [DllImport("kernel32.dll")]
        
public static extern bool AllocConsole();
        
/// <summary>
        
/// 释放控制台
        
/// </summary>
        
/// <returns></returns>
        [DllImport("kernel32.dll")]
        
public static extern bool FreeConsole();

        
    
    }
}

启动参数的实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace WindowsFormsApplication1
{
    
static class Program
    {
        
/// <summary>
        
/// 应用程序的主入口点。
        
/// </summary>
        [STAThread]
        
static void Main(string[] args)
        {
            
try
            {
                
                
if(args.Length > 0 && args[0].ToLower() == "-c")
                {
//通过命令行 xxxx.exe -c 参数启动,Console
                    
                    
//注意:不用 Main(string[] args)、System.Environment.GetCommandLineArgs();  也可以取得命令行参数在任何地方
                    
                    
//启动
                    NativeMethods.AllocConsole();
                    Console.WriteLine(
"控制台以启动");
                }
                
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(
false);
                Application.Run(
new Form1());
            }
            
finally
            {
                
//关闭 (如果在这个位置其实写不写都行了)
                NativeMethods.FreeConsole();
            }
        }
    }
}

程序实现
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    
public partial class Form1 : Form
    {
        
public Form1()
        {
            InitializeComponent();
        }

        
private void btnOpenConsole_Click(object sender, EventArgs e)
        {
            
//开启控制台
            NativeMethods.AllocConsole();
        }

        
private void btnCloseConsole_Click(object sender, EventArgs e)
        {
            
//关闭控制台
            NativeMethods.FreeConsole();
        }

        
private void btnOut_Click(object sender, EventArgs e)
        {
            
//模拟输出
            Console.WriteLine(textBox1.Text);
        }
    }
}

原创粉丝点击