【问题标题】:visual c# 2010 communicating between two projectsvisual c# 2010 在两个项目之间进行通信
【发布时间】:2012-06-15 05:42:21
【问题描述】:

我正在尝试创建一个 Windows 窗体项目,并将 Kinect 的语音识别与 Kinect to Windows SDK 一起使用。我有

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

我将其设置为命令提示符,因为它是最简单的处理方式。无论如何,我已经阅读并发现了两件事。

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

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

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

【问题讨论】:

  • 你想在两个项目之间使用共享变量吗?
  • @sleiman 是的,我确实想共享变量,这样我就可以从一个项目到另一个项目获取信息。
  • 如果你想创建两个项目之间共享对象的单个实例,请使用单例模式,但你应该知道它的优缺点,阅读它Herehere
  • 您是否在同一个解决方案中使用了两个项目?还是两种不同的解决方案?

标签: c# winforms variables kinect projects


【解决方案1】:

我将其设为命令提示符,因为它是最简单的处理方式。

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

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

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

【讨论】:

  • 我从没想过尝试一个类库。生病试一试。我尝试(但不幸失败)将我的 Kinect 方法放入一个类并执行一个命令,但后来我意识到控制台有一个循环,而类没有。我只想找到最简单的方法。
  • @cakeisajoke:您很可能希望将该循环放在类库中,从单独的线程中运行它。不过不看代码很难知道。
  • 哦不! Jon skeet 正在启动 Kinect?!?!?!?从这一点开始,我将不再获得更多代表:(。+1,因为这是我为演讲和另一个项目所做的工作
  • @OutlawLemur:我对 Kinect 一无所知。这似乎是一个显而易见的答案:)
  • @JonSkeet 哦,这是一种解脱;)。这是一个有趣的领域
【解决方案2】:

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

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

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

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

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

【讨论】:

    【解决方案3】:

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

    MSDN 参考了使用名称管道 API here

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

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

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

    这取决于您将项目分开的目标是什么。

    【讨论】:

      【解决方案4】:

      就像@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。希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多