visual c#2010在两个项目之间进行通信

时间:2012-06-15 05:42:22

标签: c# winforms variables kinect projects

我正在尝试创建一个Windows窗体项目,并使用Kinect和Windows SDK对Kinect进行语音识别。我有

  • 表单应用程序项目(p1)和
  • Kinect语音项目(p2),这是一个命令提示符。

我把它作为命令提示符,因为这是最简单的方法。无论如何,我已经阅读并发现了两件事情。

1)我发现如何在同一个解决方案中同时运行两个项目。

2)我还发现了如何添加引用以从每个项目获取类到另一个项目。

那么,我如何从每个项目中获取变量?只是通过使用项目引用,或什么? P2可以识别语音并将其保存到变量中,如果它对任何事物都有效。

4 个答案:

答案 0 :(得分:7)

  

我把它作为命令提示符,因为这是最简单的方法。

听起来像问题。听起来你真的应该考虑让你的Kinect项目成为一个类库。然后,您可以从Windows窗体应用程序调用该类库。

如果您想要一个“测试床”控制台应用程序,您总是可以编写一个也引用class library的应用程序。

请注意,通常您不应该在项目之间共享变量 - 它们是大多数封装好的系统中的实现细节 - 但是您将创建暴露属性,适当方法等的类型。

答案 1 :(得分:2)

如果我理解你的话,这里有两个选择:

  1. 将这些变量作为属性添加到类中

    using Solution.MyNamespace; 在使用其他项目的类中

  2. 如果您有需要独立的变量,请考虑添加名为Abstract的类库项目或两个项目都引用的项目

  3. 我希望这可能有所帮助, 干杯

答案 2 :(得分:0)

另一种方法是使用命名管道进行进程间通信。

MSDN具有使用名称管道API here的引用。

命名管道是.NET框架的一部分,是一种可靠的通信方法,无需担心文件的访问权限。

要沿着静态变量路径运行,您需要运行单个进程并将一个项目转换为dll并手动加载Program Main。

当然,您甚至不需要使用静态变量,但在加载时传入的引用变量上使用同步。如果你不需要运行两个独立的进程,我可能会采用这种方法。

取决于您的目标是让项目分开流程。

答案 3 :(得分:0)

像@JonSkeet所说,创建一个类库,然后就可以保存这样的信息:

    public class SpeechRecognizer
    {
        public List<string> SpeechRecognized = new List<string>
        {

        };

        public void SaveRecognizedSpeech(string foundSpeech)
        {
            SpeechRecognized.Add(foundSpeech);
        }
    }

在代码中:

        SpeechRecognizer sr = new SpeechRecognizer();
        sr.SaveRecognizedSpeech("blah blah");
        sr.SaveRecognizedSpeech("BLAH BLAH");
        Console.WriteLine("{0}, {1}", sr.SpeechRecognized[0], sr.SpeechRecognized[1]);
        Console.Read();

哦,让你的整个程序知道变量(我希望它们都在同一个解决方案中!)让它们成为public。希望这有帮助!