Visual C#形式的控制台

马特·林奇

我想在我的表单中获得一个控制台窗口。基本上,当您单击时button1,它将运行批处理脚本(test.exe)。我不希望有单独的批处理窗口,而是希望它显示在表单中。

我认为可能有两种方法可以执行此操作,或者1,以某种方式将控制台嵌入到我的表单中,或者2,StartInfo.CreateNoWindow = true;在单击button1并将输出漏斗到列表框中以模拟我的表单中的控制台时进行设置。

我有点受困,因为我找到了可以同时执行这两种方法的方法,但是我用人们建议的其他各种方法进行了自己的测试,但没有任何效果。但是无论哪种方式,我的用户都需要能够将输入发送回控制台。

哪种方法更简单,我将如何处理?

马特·林奇
using System;
using System.Diagnostics;
using System.Text;
using System.Windows.Forms;

namespace ConsoleOutput_test
{
public partial class Form1 : Form
{
    Process sortProcess;
    private static StringBuilder sortOutput = null;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        sortProcess = new Process();
        sortProcess.StartInfo.FileName = "C:\\Windows\\System32\\cmd.exe";
        // Set UseShellExecute to false for redirection.
        sortProcess.StartInfo.CreateNoWindow = true;
        sortProcess.StartInfo.UseShellExecute = false;

        // Redirect the standard output of the sort command.  
        // This stream is read asynchronously using an event handler.
        sortProcess.StartInfo.RedirectStandardOutput = true;
        sortProcess.StartInfo.RedirectStandardInput = true;
        sortProcess.StartInfo.RedirectStandardError = true;
        sortOutput = new StringBuilder("");

        // Set our event handler to asynchronously read the sort output.
        sortProcess.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler);
        sortProcess.ErrorDataReceived += new DataReceivedEventHandler(SortErrorHandler);

        // Redirect standard input as well.  This stream
        // is used synchronously.
        sortProcess.StartInfo.RedirectStandardInput = true;

        // Start the process.
        sortProcess.Start();

        // Start the asynchronous read of the sort output stream.
        sortProcess.BeginOutputReadLine();
        while (!sortProcess.HasExited)
        {
            Application.DoEvents(); // This keeps your form responsive by processing events
        }
    }

    private void SortOutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
    {
        if (txtConsole.InvokeRequired) { txtConsole.BeginInvoke(new DataReceivedEventHandler(SortOutputHandler), new[] { sendingProcess, outLine }); }
        else
        {
            txtConsole.AppendText(Environment.NewLine + outLine.Data);
        }
    }
    private void SortErrorHandler(object sendingProcess, DataReceivedEventArgs outLine)
    {
        if (txtConsole.InvokeRequired) { txtConsole.BeginInvoke(new DataReceivedEventHandler(SortErrorHandler), new[] { sendingProcess, outLine }); }
        else
        {
            txtConsole.AppendText(Environment.NewLine + outLine.Data);
        }
    }


    private void button2_Click(object sender, EventArgs e)
    {
        sortProcess.StandardInput.WriteLine(txtOutput.Text);
        txtOutput.Text = "";
    }
}
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从Visual Studio目录中删除C#控制台应用程序时挂起

在 Visual Studio 中执行 C# 代码时出现控制台问题

如何修改 Visual Studio 的 C# .Net Core 控制台应用程序项目模板

C#控制台应用程序的Visual Studio代码

从MenuStrip启动控制台应用程序(Visual C#)

Visual Studio C# 控制台应用程序 (.NET Core) 模板不同

C# 在控制台应用程序中构建 Visual Studio 项目

控制台应用程序控制台窗口-Visual C ++

Visual Studio 2019 C# 控制台应用程序 VS 控制台应用程序 (.NET Framework) 发布窗口不同

如何安装此控制台库?Visual Studio C ++

在Visual Studio 2015社区中为现有C#控制台应用程序创建服务安装程序

如何为自包含的控制台应用程序Visual Studio C#创建.msi安装程序

控制台项目的 Visual Studio 2017 中的 C# 错误并且找不到调试选项

在 Visual Studio for Mac 8.6.2 中运行 C# 控制台应用程序时使用系统终端

防止在Visual Studio C / C ++控制台应用程序上关闭控制台窗口

Visual Studio Python控制台

如何在Visual Studio 2017中创建Visual c ++ MFC控制台项目

C#:在Visual Studio控制台中制作下降块

尽管控制台子系统设置,Visual Studio 2010 C ++仍不显示控制台输出

从Visual Studio启动后,C#控制台应用程序可以正常工作,发布后仅运行3个周期,这是正常现象吗?

Visual Studios-立即打开和关闭C ++控制台

Visual Studio 2013 C ++控制台程序中的输入结束

控制台应用程序屏幕在Visual c ++ 6.0中消失

Visual Studio C ++控制台应用程序生成并运行,但未创建EXE文件

如何在Visual C ++中保持控制台窗口打开?

Ctrl-C后Visual Studio控制台程序崩溃

如何使用Visual Studio将Unicode打印到C中的输出控制台?

如何在运行时打开控制台[C ++ / Visual Studio]

默认 Visual Studio C++ 控制台应用程序有 409 错误