2016-03-25 31 views
0

我正在做一个语音识别系统来打开书签命令或网址。我面临一个未知的win32exception错误?在代码中设置固定字符完美,但不适用于插入文本字段的命令。获取Win32Exception插入的命令或URL

这里是我的代码:

namespace Voice_Bookmarking_System 
{ 
    public partial class Form1 : Form 
    { 
    SpeechRecognitionEngine recEngine = new SpeechRecognitionEngine(); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     var frm1 = new Design(); 
     frm1.ShowDialog(this); // make sure this instance of Form1 is visible 
     label1.Text = frm1.t1; 
     label2.Text = frm1.r1; 
     LoadGrammars(); 
     StartRecognition(); 
    } 

    private void LoadGrammars() 
    { 
     Choices commands = new Choices(); 
     commands.Add(new string[] { "'" + label1.Text + "'", "a",}); 
     GrammarBuilder grammarbuilder = new GrammarBuilder(); 
     grammarbuilder.Append(commands); 
     Grammar grammar = new Grammar(grammarbuilder); 
     recEngine.LoadGrammarAsync(grammar); 
    } 

    private void StartRecognition() 
    { 
     recEngine.SpeechDetected += new EventHandler<SpeechDetectedEventArgs>(recEngine_SpeechDetected); 
     recEngine.SpeechRecognitionRejected += new EventHandler<SpeechRecognitionRejectedEventArgs>(recEngine_SpeechRecognitionRejected); 
     recEngine.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recEngine_SpeechRecognized); 
     recEngine.RecognizeCompleted += new EventHandler<RecognizeCompletedEventArgs>(recEngine_RecognizeCompleted); 

     Thread t1 = new Thread(delegate() 
     { 
      recEngine.SetInputToDefaultAudioDevice(); 
      recEngine.RecognizeAsync(RecognizeMode.Single); 
     }); 
     t1.Start(); 
    } 

    private void recEngine_SpeechDetected(object sender, SpeechDetectedEventArgs e) 
    { 
     textBox1.Text = "Recognizing voice command..."; 
    } 

    private void recEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) 
    { 
     if (e.Result.Text.ToLower() == "'" + label1.Text + "'") 
     { 
      try 
      { 
       Process.Start("'" + label2.Text + "'"); 
      } 
      catch (Win32Exception) 
      { 
       Process.Start("IExplore.exe", "'"+label2.Text+"'"); 
      } 
     } 
     switch (e.Result.Text) 
     { 
      case "a": 
      { 
       Process.Start("http://www.google.com"); 
       break; 
      } 
     } 
     textBox1.Text = e.Result.Text; 
    } 

    private void recEngine_SpeechRecognitionRejected(object sender, SpeechRecognitionRejectedEventArgs e) 
    { 
     textBox1.Text = "Failure. Please try again!"; 
    } 

    private void recEngine_RecognizeCompleted(object sender, RecognizeCompletedEventArgs e) 
    { 
     recEngine.RecognizeAsync(); 
    } 
    } 
} 

这条线,我得到了我的win32exception错误:

Process.Start("IExplore.exe", "'"+label2.Text+"'"); 

消息是这个样子:

型系统的”异常。 ComponentModel.Win32Exception'发生在System.dll中但未在用户代码中处理

其他信息:系统找不到指定的文件

+1

了'label2.Text'的值是一个文本..更多先进的,当你通过'label2.Text'不带引号那么会发生什么。 。 'Process.Start( “IExplore.exe”,label2.Text);'然后会发生什么......? – MethodMan

+0

转换ToString? Unicode字符我的意思是... –

+0

什么是'label2.Text'的瓦利?..? – MethodMan

回答

0

你不需要包装这周围的任何引用文本..如果你熟悉 的String.Format功能,你可以做以下

Process.Start("IExplore.exe", "google.com"); //works if hard coded 
var procToStart = label2.Text; 
Process.Start("IExplore.exe", procToStart);//if you want to pass it by variable 

的东西一点点,如果你想使用string.Format()功能

Process.Start("IExplore.exe",string.Format("{0}", procToStart));