• Windows phone 应用开发[5]FrameworkDispatcher异常处理


    当你在Silverlight 或是Windows phone 应用程序中通过引用Microsoft.Xan.Framework尝试通过后台任务播放一段音频文件或是记录音频时. 通常会遇到如下关于FrameworkDispatcher异常信息:

    2011-12-25_152651

    一旦尝试在后台任务记录或播放一段音频文件.总是提示Application没有调用FrameworkDisplatcher.Update()方法.当你使用XNA对象在一个Silverlight或Windows phone 应用程序时这个异常很正常.在执行播放任务前.因首先检查在后台是否已经存在该资源任务的占用.如果已经占用.则以对话框的形式来提示用户是否停止.Check Code:

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

    在XnaFramework中 Xna框架的事件消息处理机制是放在一个XNA处理的消息队列中.在一个XNa Application 中实现GAme类. FrameworkDispatcher.Update()方法是自动调用Game.Update处理.

    在一个没有实现GAme类的Windows phone或Silverlight应用程序中.则必须采用手动的方式调用FrameWorkDisplatcher.Update()通过XnaFrameWork消息队列自己发送消息.

    Well 首先添加引用:

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

    创建一个类实现IApplicationService接口:

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

    实现接口两个方法:

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

    而接口调用_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:   
      18:              speechkitInitialize();
      19:              App.CancelSpeechKit += new CancelSpeechKitEventHandler(App_CancelSpeechKit);                
      20:          }
      21:   
      22:   
      23:          public void StartService(ApplicationServiceContext context)
      24:          {
      25:              _frameworkDispatcherTimer.Start();
      26:          }
      27:   
      28:          public void StopService()
      29:          {
      30:              _frameworkDispatcherTimer.Stop();
      31:          }
      32:   
      33:          void FrameworkDispatcherTimer_Tick(object sender, EventArgs e)
      34:          {
      35:              FrameworkDispatcher.Update();
      36:          }
      37:  }
    这个异常在Silverlight和Windows phone 是常见的异常. 关于frameworkDispatcher处理方式 请参考MSDN用法.

    参考资料:

    Enable Xna Framework Events in Windows phone Application

  • 相关阅读:
    java如何将char类型的数字转换成int型的数字,而不是Ascii
    java 二分查找的注意事项
    IntelliJ IDEA 下的svn配置及使用的非常详细的图文总结
    java中Math的常用方法整理
    判断字符串是否可由重复子字符串组成
    P3558 [POI2013]BAJ-Bytecomputer
    BZOJ 3329. Xorequ
    Codeforces 1221F. Choose a Square
    Codeforces 1221E. Game With String
    Codeforces 1221D. Make The Fence Great Again
  • 原文地址:https://www.cnblogs.com/chenkai/p/2301063.html
Copyright © 2020-2023  润新知