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

visual c#2010在两个项目之间进行通信,c#,winforms,variables,kinect,projects,C#,Winforms,Variables,Kinect,Projects,我正在尝试创建一个windows窗体项目,并使用Kinect到windows SDK对Kinect进行语音识别。我有 表格申请项目(p1)和 Kinect语音项目(p2),它是一个命令提示符 我把它作为命令提示符,因为这是最简单的方法。不管怎样,我读了这本书,发现了两件事 1) 我发现了如何在同一个解决方案中同时运行两个项目 2) 我还了解了如何添加引用以从每个项目到另一个项目获取类 那么,我如何从每个项目中获取变量呢?仅仅通过使用项目引用,还是什么?P2可以识别语音并将其保存到变量中,如果

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

  • 表格申请项目(p1)和
  • Kinect语音项目(p2),它是一个命令提示符
我把它作为命令提示符,因为这是最简单的方法。不管怎样,我读了这本书,发现了两件事

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

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


那么,我如何从每个项目中获取变量呢?仅仅通过使用项目引用,还是什么?P2可以识别语音并将其保存到变量中,如果这很重要的话。

如果我理解正确,这里有几个选项:

  • 然后将这些变量作为属性添加到类中

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

  • <> >如果您有需要独立的变量,请考虑添加一个名为抽象的类库项目或两个项目引用的项目

    我希望这会有所帮助,
    Cheers

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

    MSDN有使用管道API名称的引用

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

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

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

    这取决于你的目标是什么,让项目分开处理

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

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

    如果你想要一个“测试床”控制台应用程序,你可以编写一个也引用了


    请注意,一般来说,您不应该在项目之间共享变量——它们是大多数封装良好的系统中的实现细节——但您应该创建公开属性、适当方法等的类型。

    如@JonSkeet所说,创建类库,然后您可以像这样保存信息:

        public class SpeechRecognizer
        {
            public List<string> SpeechRecognized = new List<string>
            {
    
            };
    
            public void SaveRecognizedSpeech(string foundSpeech)
            {
                SpeechRecognized.Add(foundSpeech);
            }
        }
    

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

    您想在两个项目之间使用共享变量吗?@sleiman是的,我想共享变量,这样我可以从一个项目到另一个项目获取信息。如果您想创建两个项目之间共享的对象的单个实例,请使用Singleton模式,但您应该了解其优缺点,阅读它,您是否在同一个解决方案中使用两个项目?还是两种不同的解决方案?我从没想过尝试一个类库。我试试看。我尝试(不幸地失败了)将我的Kinect方法放入一个类中并执行一个命令,但后来我意识到控制台有一个循环,而类没有。我只想找到最简单的方法。@CakeisaChake:您很可能希望将该循环放在类库中,从单独的线程运行它。不看代码很难知道。哦,不!乔恩·斯基特在启动Kinect?!?!?!?从这一点上,我将不会获得更多的代表:(.1),因为这是我为演讲和另一个项目所做的combined@OutlawLemur当前位置我对Kinect一无所知。这似乎是一个显而易见的答案:)@JonSkeet噢,这是一种解脱;)。这是一个有趣的领域
            SpeechRecognizer sr = new SpeechRecognizer();
            sr.SaveRecognizedSpeech("blah blah");
            sr.SaveRecognizedSpeech("BLAH BLAH");
            Console.WriteLine("{0}, {1}", sr.SpeechRecognized[0], sr.SpeechRecognized[1]);
            Console.Read();