2012-02-13 46 views
0

我开发了一个C#程序,我用它作为父进程的子进程(使用与C#不同的编程语言编写,即:Smallworld Magik)。使用C#程序的标准I/O通道进行通信。交互式C#进程通信

其含义是与Smallworld Magik进程中的C#程序进行通信。因此,C#程序应该接收来自Smallworld Magik进程的命令,而Smallworld Magik进程应该接收C#程序的结果/更新。

C#程序最初通过程序的主要方法接收参数。 C#程序将结果/更新写入输出通道,Smallworld Magik进程接收并处理它们。

在这里没有问题。

该问题位于由C#程序接收来自输入通道(System.Console.In)的输入命令。我使用System.Console.ReadLine()方法来获取输入命令。调用此方法会阻止进一步的程序执行。

有人对此有“非阻塞”解决方案吗? 由于我是一名新手C#开发人员,请保持低级:)。

+0

你可以试试这个:http://stackoverflow.com/questions/57615/how-to-add-a-timeout-to-console-readline – Blorgbeard 2012-02-13 13:18:44

+0

你是什么意思与“块” ?因为当你使用ReadLine()时,C#程序将等待输入数据,这是你调用“block”的吗?或者当您使用ReadLine()读取数据时,程序停止工作? – 2012-02-13 13:27:48

回答

0

你可以使用线程,既然你说你是一个rooky我会引导您进入教程,因为线程是棘手的,你应该知道你在做什么:http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx

接下来的事情你做为ReadLine创建一个单独的线程并将结果调用回主线程。就像这样:

void Start() 
{ 
    Thread T = new Thread(ThreadMethod); 
    T.IsBackground = true; 
    T.Start(); 
} 

void ThreadMethod() 
{ 
    string s = System.Console.ReadLine(); 

    this.Invoke(DoStuffInMain, s); 
} 

void DoStuffInMainThread(string s) 
{ 
    // 
} 
+0

'this.Invoke()'只能在Winforms应用程序中使用。 – svick 2012-02-13 16:10:55

+0

谢谢。上述建设效果良好。我没有使用Invoke()。 – dotnick 2012-02-14 09:48:41