你的C#应用​​程序中的命令行界面(Command line interface inside yo

2019-07-30 01:45发布

我一直在使用C#的几个项目,没有什么大什么的。 所以我想现在就开始在一个真正的项目工作。 我创建了一个C#中的IRC bot的。 这IRC bot的运行没有在一个命令行的GUI。 它运行现在时,它输出的每一个命令和东西。

我想要做的就是创建一个接口,为命令行中的应用程序。 所以,即时通讯能够命令输入到应用程序和输出该命令的结果。

我试过在多线程我的软件读取多个主题,因为我相信这是需要我来实现这一功能。 但是,我不知道。

我读过类似的线程在Java命令行界面和http://msdn.microsoft.com/en-us/library/aa288457(v=vs.71).aspx 。 但是我还是很困惑。

我试着用搜索引擎就此事做任何一样工具包http://alexis.royer.free.fr/CLI/

我想请教在这个问题上,如果可能,在基本对这一计划的帮助。 如果有人强烈建议我不要搜索C#中这个功能,那么我将很高兴听到他/她为什么不和建议我应该用什么/做意见。

提前谢谢了! 罗伯托。

PS我道歉,我不正确英语语法。

Answer 1:

这里是一个非常简单的命令行,用的怎么办不同的颜色和处理参数的例子:

using System;
using System.Linq;

namespace SOSimpleCLI
{
    class Program
    {
        static void Main(string[] args)
        {
            string cmdLine = null;
            while (cmdLine != "end")
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("SOSimpleCLI: ");
                Console.ForegroundColor = ConsoleColor.White;

                cmdLine = Console.ReadLine();

                string[] cmd = cmdLine.Split(' ');
                switch (cmd.FirstOrDefault())
                {
                    case "cmd1":
                        Console.WriteLine(Cmd1());
                        break;

                    case "cmd2":
                        if (cmd.Length != 2)
                        {
                            Console.WriteLine("Wrong number of args for cmd2");
                        }
                        else
                        {
                            Console.WriteLine(Cmd2(cmd[1]));
                        }
                        break;
                }
            }
        }

        static string Cmd1()
        {
            return "Came from command 1";
        }

        static string Cmd2(string arg)
        {
            return string.Format("Came from command 2: {0}", arg);
        }
    }
}

我不知道为什么你希望它是多线程的,但你可以补充一点,通过与不同的方法里面的线程交互。



Answer 2:

在Windows中,一个进程映像可以启动或者在GUI模式(在屏幕上的所有窗口......或没有),或作为“控制台”的过程(以命令窗口将在同一时间打开的过程)。 但是两者并不相互排斥:“控制台”过程可以创建窗口,和GUI程序可以创建和拥有自己的命令行窗口。 然而,创建一个控制台窗口GUI应用程序将无法打开任何父控制台会话控制台。

从我明白你的问题,你有一个现有的GUI应用程序,并要启用某种控制台(如地震控制台)到您的应用程序,而不是将其转换成一个唯一的控制台程序。

这可以使用Win32中AllocConsole函数来完成。 我建议你阅读这篇Q&A: 我如何包括的WinForms控制台?



Answer 3:

如果你感到困惑,你是否需要多线程应用程序,我会建议更换第一念叨优势和线程的缺点一点点。 乔阿尔巴哈利的第一章网络本书是一个伟大的介绍。

没有完全理解你的程序DESGIN,我会建议你在后台线程上执行所有的聊天机器人的行为。 此外,您键入到控制台的任何命令也应该触发后台工作,这让自由要么打印输出或接受输入的控制台,但不进行任何实际的聊天职责。 请让我知道,如果你有任何问题。



Answer 4:

为了解析命令你真的不需要使用线程这里是最好的办法了一些信息,以做到这一点

有超过@几个命令行解析器Codeplex.com 。 他们都将是非常复杂,所以这取决于有多少命令行解析你想要做的,你可以使用这些。

我只想开出用string.substring

对于CONNECT [[]]字符串命令= “连接IRC:// QuakeNet”

  int end = command.IndexOf(" ");
  string cmd = command.substring(0,end);

  switch(cmd.ToLower())
  {
    case "connect":
         string site = command.SubString(end + 1, cmd.Length -1)
         //Do what you need to do to connect to the site
    break;
   }

如果你真正到了一点,你需要使用线程,你可以随时使用一个BackgroundWorker线程

教程如何使用一个后台线程



Answer 5:

你有没有考虑创建一个Windows服务? 该服务将包含所有代码的“自己的东西”。 然后,您可以发出对服务(通过命令ExecuteCommand )。

然后,您可以创建多个用户界面,包括控制台和图形用户界面,它只需调用到服务,然后接收信息反馈。 这将使你发出通过标准的命令行窗口的命令,并看到一个GUI的结果,而不试图从同一项目内管理Windows的并发症。

(这也给你一个多进程应用程序,而不必自己显式管理的过程。)



文章来源: Command line interface inside your C# application