Windows phone 應用開發[5]-FrameworkDispatcher異常處理

當你在Silverlight 或是Windows phone 應用程序中經過引用Microsoft.Xan.Framework嘗試經過後臺任務播放一段音頻文件或是記錄音頻時. 一般會遇到以下關於FrameworkDispatcher異常信息:sql

一旦嘗試在後臺任務記錄或播放一段音頻文件.老是提示Application沒有調用FrameworkDisplatcher.Update()方法.當你使用XNA對象在一個Silverlight或Windows phone 應用程序時這個異常很正常.在執行播聽任務前.因首先檢查在後臺是否已經存在該資源任務的佔用.若是已經佔用.則以對話框的形式來提示用戶是否中止.Check Code:框架

  
  
  
  
  1. if (!Microsoft.Xna.Framework.Media.MediaPlayer.GameHasControl)  
  2. //play Background Music File 

在XnaFramework中 Xna框架的事件消息處理機制是放在一個XNA處理的消息隊列中.在一個XNa Application 中實現GAme類. FrameworkDispatcher.Update()方法是自動調用Game.Update處理.ide

在一個沒有實現GAme類的Windows phone或Silverlight應用程序中.則必須採用手動的方式調用FrameWorkDisplatcher.Update()經過XnaFrameWork消息隊列本身發送消息.this

Well 首先添加引用:spa

  
  
  
  
  1. using System.Windows.Threading;     
  2. using Microsoft.Xna.Framework; 

建立一個類實現IApplicationService接口:3d

  
  
  
  
  1. public partial class NuanceFunctionDemo_Form : RecognizerListener, IApplicationService     
  2. {} 
 

實現接口兩個方法:orm

  
  
  
  
  1. public void StartService(ApplicationServiceContext context)     
  2. {     
  3. _frameworkDispatcherTimer.Start();     
  4. }     
  5.  
  6. public void StopService()     
  7. {     
  8. _frameworkDispatcherTimer.Stop();    

而接口調用_frameworkDispatcherTimer則是DispatcherTimer對象的實例.完整處理Code:對象

  
  
  
  
  1. private DispatcherTimer _frameworkDispatcherTimer;     
  2.  
  3. void NuanceFunctionDemo_Form_Loaded(object sender, RoutedEventArgs e)     
  4. {     
  5.     this.VoiceType_LP.ItemsSource = voiceDefineTypeList;     
  6.     this.VoiceType_LP.SelectedIndex = 0;     
  7.  
  8.     //textBoxResult.Text = "test one. test two. test three. test four.";     
  9.     textBoxServerIp.Text = AppInfo.SpeechKitServer;    
  10.     textBoxServerPort.Text = AppInfo.SpeechKitPort.ToString();    
  11.  
  12.  
  13.     _frameworkDispatcherTimer = new DispatcherTimer();    
  14.     _frameworkDispatcherTimer.Tick += FrameworkDispatcherTimer_Tick;    
  15.     _frameworkDispatcherTimer.Interval = new TimeSpan(0, 0, 3);    
  16.     FrameworkDispatcher.Update();    
  17.     speechkitInitialize();    
  18.     App.CancelSpeechKit += new CancelSpeechKitEventHandler(App_CancelSpeechKit);                    
  19. }    
  20.  
  21.  
  22. public void StartService(ApplicationServiceContext context)    
  23. {    
  24.     _frameworkDispatcherTimer.Start();    
  25. }    
  26.  
  27. public void StopService()    
  28. {    
  29.     _frameworkDispatcherTimer.Stop();    
  30. }    
  31.  
  32. void FrameworkDispatcherTimer_Tick(object sender, EventArgs e)    
  33. {    
  34.     FrameworkDispatcher.Update();    
  35. }    

這個異常在Silverlight和Windows phone 是常見的異常. 關於frameworkDispatcher處理方式 請參考MSDN用法.blog

參考資料:接口

Enable Xna Framework Events in Windows phone Application

相關文章
相關標籤/搜索