2012-06-15 2 views
2

Я пытаюсь создать проект формы Windows и использовать распознавание речи для Kinect с помощью Kinect для Windows SDK. У меня естьvisual C# 2010, связанный между двумя проектами

  • проект формы заявки (p1) и
  • проекта речи Kinect (p2), который представляет собой командную строку.

Я сделал это командной подсказкой, потому что это был самый простой способ сделать что-то. Во всяком случае, я прочитал и нашел две вещи об этом.

1) Я узнал, как одновременно запускать два проекта в одном решении.

2) Я также узнал, как добавить ссылки, чтобы получить классы от каждого проекта к другому.

Итак, как бы получить переменные от каждого проекта? Просто используя ссылки на проекты или что-то еще? P2 может распознавать речь и сохранять ее в переменных, если это имеет значение для чего угодно.

+1

Вы хотите использовать общие переменные между обоими проектами? –

+0

@sleiman Да, я хочу поделиться переменными, поэтому я могу получить информацию от одного проекта к другому. – pjrader1

+1

Если вы хотите создать отдельный экземпляр объекта, разделяемого между двумя проектами, используйте шаблон Singleton, но вы должны знать его плюсы и минусы, прочитать его [здесь] (http://stackoverflow.com/questions/228164/on-design -патроны-когда-к-use-the-singleton) и [здесь] (http://stackoverflow.com/questions/604844/pros-and-cons-of-using-singleton-pattern-in-dal) – MSUH

ответ

7

Я сделал это командной подсказкой, потому что это был самый простой способ сделать что-то.

Звучит как проблема. Похоже, вы действительно должны смотреть на создание своего проекта Kinect в библиотеке классов. Затем вы можете просто вызвать эту библиотеку классов из приложения Windows Forms.

Если вы хотите использовать консольное приложение «тестовой кровати», вы всегда можете написать тот, который также ссылается на class library.

Обратите внимание, что, как правило, вы не должны делить переменные между проектами - они детали реализации в наиболее хорошо герметизированных систем - но вы можете создать типы, которые вскрывают свойства, соответствующие методы и т.д.

+0

Я никогда не думал о том, чтобы попробовать библиотеку классов. Я приготовлю его. Я попробовал (и пропустил неудачу), чтобы поместить мои методы Kinect в класс и выполнить команду, но потом я понял, что в консоли есть цикл, в котором класс не работает. Я просто хочу найти самый простой способ. – pjrader1

+1

@cakeisajoke: Вы вполне могли бы поместить этот цикл в библиотеку классов, запуская его из отдельного потока. Трудно узнать, не видя кода. –

+1

О нет! Джон skeet начинает Kinect?!?!?!? С этого момента я не получу никакого опыта :(+1, так как это то, что я сделал для речи, а другой проект - –

2

Вот несколько вариантов, если я понять вас правильно:

  1. Добавьте эти переменные в классы как свойства затем

    using Solution.MyNamespace; в классе, который использует другой проект

  2. Если у вас есть переменные, которые должны быть независимыми, рассмотрите возможность добавления проекта библиотеки классов под названием Abstract или что-то, что ссылается на оба проекта:

Я надеюсь, что это может помочь, Приветствия

0

Другой способ заключается в использовании именованных каналов для межпроцессного взаимодействия.

В MSDN есть ссылки на использование труб с названиями API here.

Именованные каналы являются частью платформы .NET и являются надежным способом общения, не беспокоясь о правах доступа к файлам.

Чтобы спуститься по статическому пути переменной, вам нужно будет запустить один процесс и превратить один проект в dll и вручную загрузить главную программу.

Конечно, вам даже не нужно использовать статические переменные, но использовать синхронизацию по ссылочным переменным, переданным во время загрузки. Я бы, вероятно, пошел этот метод, если вам не нужно было запускать два отдельных процесса.

Просто зависит от того, какова ваша цель состоит в том, чтобы проектировать отдельные процессы.

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. Надеюсь это поможет!