我一直在使用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我道歉,我不正确英语语法。
这里是一个非常简单的命令行,用的怎么办不同的颜色和处理参数的例子:
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);
}
}
}
我不知道为什么你希望它是多线程的,但你可以补充一点,通过与不同的方法里面的线程交互。
在Windows中,一个进程映像可以启动或者在GUI模式(在屏幕上的所有窗口......或没有),或作为“控制台”的过程(以命令窗口将在同一时间打开的过程)。 但是两者并不相互排斥:“控制台”过程可以创建窗口,和GUI程序可以创建和拥有自己的命令行窗口。 然而,创建一个控制台窗口GUI应用程序将无法打开任何父控制台会话控制台。
从我明白你的问题,你有一个现有的GUI应用程序,并要启用某种控制台(如地震控制台)到您的应用程序,而不是将其转换成一个唯一的控制台程序。
这可以使用Win32中AllocConsole函数来完成。 我建议你阅读这篇Q&A: 我如何包括的WinForms控制台?
如果你感到困惑,你是否需要多线程应用程序,我会建议更换第一念叨优势和线程的缺点一点点。 乔阿尔巴哈利的第一章网络本书是一个伟大的介绍。
没有完全理解你的程序DESGIN,我会建议你在后台线程上执行所有的聊天机器人的行为。 此外,您键入到控制台的任何命令也应该触发后台工作,这让自由要么打印输出或接受输入的控制台,但不进行任何实际的聊天职责。 请让我知道,如果你有任何问题。
为了解析命令你真的不需要使用线程这里是最好的办法了一些信息,以做到这一点
有超过@几个命令行解析器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线程
教程如何使用一个后台线程
你有没有考虑创建一个Windows服务? 该服务将包含所有代码的“自己的东西”。 然后,您可以发出对服务(通过命令ExecuteCommand )。
然后,您可以创建多个用户界面,包括控制台和图形用户界面,它只需调用到服务,然后接收信息反馈。 这将使你发出通过标准的命令行窗口的命令,并看到一个GUI的结果,而不试图从同一项目内管理Windows的并发症。
(这也给你一个多进程应用程序,而不必自己显式管理的过程。)