Visual C# 2010 在两个项目之间进行通信
本文关键字:项目 两个 之间 通信 2010 Visual | 更新日期: 2023-09-27 18:37:28
我正在尝试创建一个Windows表单项目,并使用Kinect到Windows SDK的Kinect语音识别。我有
- 表单申请项目(P1)和
- Kinect 语音项目 (p2),这是一个命令提示符。
我把它设置为命令提示符,因为它是最简单的做事方法。无论如何,我已经阅读并发现了两件事。
1)我发现了如何在同一解决方案中同时运行两个项目。
2)我还发现了如何添加引用以将类从每个项目获取到另一个项目。
那么,我将如何从每个项目中获取变量呢?只是通过使用项目引用或其他东西?P2 可以识别语音并将其保存到变量中,如果这有什么意义的话。
我把它设置为命令提示符,因为它是最简单的做事方法。
这听起来像是问题所在。听起来你应该考虑让你的 Kinect 项目成为一个类库。然后,您只需从 Windows 窗体应用程序调用该类库即可。
如果你想要一个"测试平台"控制台应用,你总是可以编写一个也引用类库的应用。
请注意,通常您不应该在项目之间共享变量 - 它们是大多数封装良好的系统中的实现细节 - 但您将创建公开属性、适当方法等的类型。
如果我理解正确,这里有几个选项:
-
然后将这些变量作为属性添加到类中
using Solution.MyNamespace;
在使用其他项目的类中 -
如果您有需要独立的变量,请考虑添加一个名为 Abstract 的类库项目或两个项目都引用的内容
我希望这可能会有所帮助,干杯
另一种方法是使用命名管道进行进程间通信。
MSDN 在此处提供了使用名称管道 API 的引用。
命名管道是 .NET 框架的一部分,是一种可靠的通信方法,无需担心文件的访问权限。
要沿着静态变量路径前进,您需要运行单个进程并将一个项目转换为 dll 并手动加载 Program Main。
当然,您甚至不需要使用静态变量,而是在加载时对传入的引用变量使用同步。如果您不需要运行两个单独的进程,我可能会使用此方法。
只是取决于你的目标是让项目分开的流程。
就像@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
。希望这有帮助!