2016-03-25 8 views
0

ブックマークしたコマンドまたはURLを開くために音声認識システムを使用しています。私は未知のwin32exceptionエラーに直面していますか?コード内に固定語を設定すると完全に機能しますが、テキストフィールド挿入コマンドでは機能しません。挿入されたコマンドまたはURLのWin32Exceptionを取得する

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)); 
関連する問題