Yijing Sun 2022-09-06 15:07 采纳率: 100%
浏览 79
已结题

winform启动控制台程序

背景:
winform 的项目。一个解决方案下面有两个程序:一个winform项目,一个控制台项目。在winform 中有两个按钮,按钮A是开始,按钮B 是结束。按钮 A 可以启动控制台程序。
在控制台项目中,有三个方法,一个是连接,一个是登录,一个是发送。 当点击winform 上的按钮A 后,会启动 控制台项目,然后执行连接,登录,发送操作。

问题:
问题一:当按钮A 执行完控制台之后,控制台依旧不关闭,等待下一次输入。 按按钮B 时,不会启动一个新的控制台程序,而是使用之前的控制台。
问题二:按钮B启动之后,连接和登录保持,所以不需要操作,只需要执行发送命令
问题三:控制台如何保持等待输入状态,直到手动关闭控制台程序。

代码:
winform:
butonA:

   Process cmd = new Process();
            cmd.StartInfo.FileName = @"xxxxx";
            cmd.Start();

控制台:

class Test
{
public void Connection(){}
public striing login(){}
public void send(){}
}
class Program
    {
        static void Main(string[] args)
       {
       }
}

求一个思路!

  • 写回答

4条回答 默认 最新

  • 浪客 2022-09-06 16:08
    关注
    控制台
    
    using System;
    using System.Runtime.InteropServices;
    
    namespace WindowsFormsApp1
    {
        class Test
        {
            public void Connection() { Console.WriteLine("Conn"); }
            public string login() { Console.WriteLine("Login"); return "OK"; }
            public void send() { Console.WriteLine("send"); }
        }
        public class cmdApp
        {
            Test test;
            //static Test test = new Test();
            public cmdApp() { test = new Test(); }
            public void Connection() { test.Connection(); }
            public string login() { return test.login(); }
            public void send() { test.send(); }
            /// <summary>
            /// 启动控制台
            /// </summary>
            /// <returns></returns>
            [DllImport("kernel32.dll")]
            public static extern bool AllocConsole();
            /// <summary>
            /// 释放控制台
            /// </summary>
            /// <returns></returns>
            [DllImport("kernel32.dll")]
            public static extern bool FreeConsole();
            public static void Main()
            { }
        }
    
    }
    
    
    
    
    form
    
    using System.Windows.Forms;
    
    namespace WindowsFormsApp1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            cmdApp cmdapp = new cmdApp();
            private void button1_Click(object sender, System.EventArgs e)
            {
                cmdApp.AllocConsole();
                cmdapp.Connection();
                cmdapp.login();
            }
            private void button2_Click(object sender, System.EventArgs e)
            {
                cmdapp.send();
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 9月14日
  • 已采纳回答 9月6日
  • 修改了问题 9月6日
  • 赞助了问题酬金10元 9月6日
  • 展开全部

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵