2015-01-17 4 views
1

я создал следующую программу с помощью некоторых интернет-ресурсов для создания Джарвис:«Управляемый DEBUGGING Помощника„RaceOnRCWCleanup“обнаружил problm в» Jarvis

 namespace JarvisFile1 
    { 
     public partial class Form1 : Form 
     { 
      private void Form1_Load(object sender, EventArgs e) 
      { 
       _recognizer.SetInputToDefaultAudioDevice(); 
       _recognizer.LoadGrammar(new Grammar(new GrammarBuilder(new Choices(File.ReadAllLines(@"C:\Users\Nelson\Documents\JarvisCommands\greetings.txt"))))); 
       _recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(_recognizer_SpeechRecognized); 
       _recognizer.RecognizeAsync(RecognizeMode.Multiple); 
      } 
     SpeechRecognitionEngine _recognizer = new SpeechRecognitionEngine(); 
     SpeechSynthesizer JARVIS = new SpeechSynthesizer(); 
     string QEvent; 
     string ProcWindow; 
     double timer = 10; 
     int count = 1; 
     Random rnd = new Random(); 
     public Form1() 
     { 
      InitializeComponent(); 
     } 


     void _recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) 
     { 
      int ranNum = rnd.Next(1, 10); 
      string speech = e.Result.Text; 
      switch (speech) 
      { 
       //GREETINGS 
       case "hello": 
       case "hello jarvis": 
        if (ranNum < 6) { JARVIS.Speak("Hello sir"); } 
        else if (ranNum > 5) { JARVIS.Speak("Hi"); } 
        break; 
       case "goodbye": 
       case "goodbye jarvis": 
       case "close": 
       case "close jarvis": 
        JARVIS.Speak("Until next time"); 
        Close(); 
        break; 
       case "jarvis": 
        if (ranNum < 5) { QEvent = ""; JARVIS.Speak("Yes sir"); } 
        else if (ranNum > 4) { QEvent = ""; JARVIS.Speak("Yes?"); } 
        break; 
      } 
     } 


    } 
} 

компилятор компилирует его совершенно на первый, а затем дает следующее сообщение об ошибке:

«Управляемая 'RaceOnRCWCleanup' DEBUGGING Assistant обнаружил проблему в«C: \ Users \ Нельсону \ Documents \ Visual Studio 2013 \ Projects \ JarvisFile1 \ JarvisFile1 \ Bin \ Debug \ JarvisFile1.vshost.exe '.

Дополнительная информация: Была предпринята попытка освободить RCW, который используется . RCW используется в активном потоке или другом потоке. Попытка освободить в RCW в использовании может привести к повреждению или потере данных.»

Я не совсем уверен, что это значит, как я новичок в кодировании. Любая помощь, чтобы решить эту проблему, была бы оценена . Я могу предоставить дополнительные журналы отладки, если это необходимо, я использую Windows 8 и Visual Studio 2013.

бревна приведены ниже:.

'JarvisFile1.vshost.exe' (CLR v4.0.30319: JarvisFile1.vshost .exe): Загружен 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_32 \ mscorlib \ v4.0_4.0.0.0__b77a5c561934e089 \ mscorlib.dll'. Не удается найти или открыть PDB-файл. 'JarvisFile1.vshost.exe' (CLR v4.0.30319: JarvisFile1.vshost.exe): Загружен 'C: \ Windows \ assembly \ GAC_MSIL \ Microsoft.VisualStudio.HostingProcess.Utilities \ 12.0.0.0__b03f5f7f11d50a3a \ Microsoft.VisualStudio.HostingProcess .Utilities.dll. Не удается найти или открыть файл PDB. «JarvisFile1.vshost.exe» (CLR v4.0.30319: JarvisFile1.vshost.exe): Загружен «C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System.Windows.Forms \ v4.0_4.0.0.0bbb5a5c561934e089 \ System.Windows.Forms.dll. Не удается найти или открыть файл PDB. «JarvisFile1.vshost.exe» (CLR v4.0.30319: JarvisFile1.vshost.exe): загружен «C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System.Drawing \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ System. Drawing.dll. Не удается найти или открыть файл PDB. «JarvisFile1.vshost.exe» (CLR v4.0.30319: JarvisFile1.vshost.exe): загружен «C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System \ v4.0_4.0.0.0__b77a5c561934e089 \ System.dll ' , Не удается найти или открыть файл PDB. «JarvisFile1.vshost.exe» (CLR v4.0.30319: JarvisFile1.vshost.exe): загружен «C: \ Windows \ assembly \ GAC_MSIL \ Microsoft.VisualStudio.HostingProcess.Utilities.Sync \ 12.0.0.0__b03f5f7f11d50a3a \ Microsoft.VisualStudio .HostingProcess.Utilities.Sync.dll. Не удается найти или открыть файл PDB. 'JarvisFile1.vshost.exe' (CLR v4.0.30319: JarvisFile1.vshost.exe): Загружен 'C: \ Windows \ assembly \ GAC_MSIL \ Microsoft.VisualStudio.Debugger.Runtime \ 12.0.0.0__b03f5f7f11d50a3a \ Microsoft.VisualStudio.Debugger .Runtime.dll. 'JarvisFile1.vshost.exe' (CLR v4.0.30319: JarvisFile1.vshost.exe): Загружен 'c: \ users \ nelson \ documents \ visual studio 2013 \ Projects \ JarvisFile1 \ JarvisFile1 \ bin \ Debug \ JarvisFile1.vshost. Exe'. Не удается найти или открыть файл PDB. «JarvisFile1.vshost.exe» (CLR v4.0.30319: JarvisFile1.vshost.exe): загружен сборку «C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System.Core \ v4.0_4.0.0.0bab5a5c561934e089 \ System. Core.dll. Не удается найти или открыть файл PDB. «JarvisFile1.vshost.exe» (CLR v4.0.30319: JarvisFile1.vshost.exe): загружен «C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System.Xml.Linq \ v4.0_4.0.0.0bbaa5c561934e089 \ System.Xml.Linq.dll. Не удается найти или открыть файл PDB. «JarvisFile1.vshost.exe» (CLR v4.0.30319: JarvisFile1.vshost.exe): загружен «C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System.Data.DataSetExtensions \ v4.0_4.0.0.0b2a5c561934e089 \ System.Data.DataSetExtensions.dll. Не удается найти или открыть файл PDB. 'JarvisFile1.vshost.exe' (CLR v4.0.30319: JarvisFile1.vshost.exe): загружен «C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ Microsoft.CSharp \ v4.0_4.0.0.0bb3f5f7f11d50a3a \ Microsoft.CSharp.dll '. Не удается найти или открыть файл PDB. «JarvisFile1.vshost.exe» (CLR v4.0.30319: JarvisFile1.vshost.exe): Загружен «C: \ Windows \ Microsoft.Net \ assembly \ GAC_32 \ System.Data \ v4.0_4.0.0.0bb.a5c561934e089 \ System. Data.dll. Не удается найти или открыть файл PDB. «JarvisFile1.vshost.exe» (CLR v4.0.30319: JarvisFile1.vshost.exe): Загружен «C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System.Deployment \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ System. Deployment.dll. Не удается найти или открыть файл PDB. «JarvisFile1.vshost.exe» (CLR v4.0.30319: JarvisFile1.vshost.exe): загружен «C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System.Xml \ v4.0_4.0.0.0__b77a5c561934e089 \ System. Xml.dll. Не удается найти или открыть файл PDB. «JarvisFile1.vshost.exe» (CLR v4.0.30319: JarvisFile1.vshost.exe): загружен сборник «C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System.Speech \ v4.0_4.0.0.03131bf3856ad364e35 \ System. Speech.dll. Не удается найти или открыть файл PDB. Поток 0x1cf4 вышел с кодом 259 (0x103). Поток 0x11f8 вышел с кодом 259 (0x103). Поток 0xd6c вышел с кодом 0 (0x0). Поток 0x23c вышел с кодом 0 (0x0). Поток 0x610 вышел с кодом 259 (0x103). 'JarvisFile1.vshost.exe' (CLR v4.0.30319: JarvisFile1.vshost.exe): Загружен 'c: \ users \ nelson \ documents \ visual studio 2013 \ Projects \ JarvisFile1 \ JarvisFile1 \ bin \ Debug \ JarvisFile1.exe' , Загружены символы. «JarvisFile1.vshost.exe» (CLR v4.0.30319: JarvisFile1.vshost.exe): загружен «C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System.Configuration \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ System. Configuration.dll. Не удается найти или открыть файл PDB. JarvisFile1.vshost.exe Информация: 0: SAPI не реализует выбор фонетического алфавита. Поток 0x2270 вышел с кодом 259 (0x103). Поток 0x1b8 вышел с кодом 259 (0x103). Поток 0x1c2c вышел с кодом 259 (0x103). Поток 0x1650 вышел с кодом 259 (0x103). Программа '[9444] JarvisFile1.vshost.exe: Program Trace' вышла с кодом 0 (0x0). Программа '[9444] JarvisFile1.vshost.exe' вышла с кодом 0 (0x0).

+0

Когда это происходит? Когда вы пытаетесь закрыть свою программу или когда вы ее запускаете? – Icemanind

+0

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

+0

Я запускаю свой код на своей машине и, похоже, работает нормально. Журналы, вероятно, помогут. – Icemanind

ответ

1

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

редактировать:

Взяты с сайта MSDN

Всегда вызывайте Dispose перед тем, как выпустить свою последнюю ссылку на распознаватель речи. В противном случае ресурсы, которые он использует, не будут освобождены до тех пор, пока сборщик мусора не вызовет метод Finalize объекта распознавателя.

Вы можете подключить в случае RecognizeCompleted и когда вы получите «стоп» завершена, разъединение на вашем двигателе, а затем вызвать Close()

так что вы бы для кода:

 . 
     . 
     case "close jarvis": 
     _recognizer.RecognizeCompleted += new EventHandler<RecognizeCompletedEventArgs>(_recognizer_RecognizeCompleted); 
      JARVIS.Speak("Until next time"); 
      break; 
     . 
     . 

    void _recognizer_RecognizeCompleted(RecognizeCompletedEventArgs e) 
    { 
     _recognizer.Release(); 
     Close(); 
    ] 

Поскольку вы новичок в кодировании, я хотел сначала показать этот путь, потому что вы знакомы с синтаксисом. Но лучший способ для Вашего случая будет:

 case "close jarvis": 
     _recognizer.RecognizeCompleted += (e) => { Close(); } 
      JARVIS.Speak("Until next time"); 
      break; 

Это встраивание обработчик событий вместо того, чтобы с помощью делегата.

+0

Судя по его сообщению об ошибке, это на самом деле звучит как раз наоборот. Похоже, что его ресурсы речевого механизма освобождаются, пока он пытается их использовать. – Icemanind

+0

Есть ли решение для этого? –

+0

Вы попробовали выше? Это должно решить проблему при выключении. Кроме того, похоже, вам нужно установить информацию о культуре для вашей грамматики. Вы можете создать объект Grammar, а затем использовать «grammerObj.Culture = New System.Globalization.CultureInfo (« ... »)», и вам нужно найти свою конкретную строку информации о культуре. ex будет в США. – BoldAsLove