private RESULT ChannelEndCallback(IntPtr channelraw, CHANNELCONTROL_TYPE controltype, CHANNELCONTROL_CALLBACK_TYPE type, IntPtr commanddata1, IntPtr commanddata2) { if (type == CHANNELCONTROL_CALLBACK_TYPE.END) { // this must be thread safe var currentSynchronizationContext = TaskScheduler.FromCurrentSynchronizationContext(); var uiTask = Task.Factory.StartNew(() => { var action = this.playNextFileAction; if (action != null) { action(); } }, CancellationToken.None, TaskCreationOptions.None, currentSynchronizationContext); } return FMOD.RESULT.OK; }
private RESULT ChannelEndCallback(IntPtr channelcontrol, CHANNELCONTROL_TYPE controltype, CHANNELCONTROL_CALLBACK_TYPE callbacktype, IntPtr commanddata1, IntPtr commanddata2) { if (callbacktype == CHANNELCONTROL_CALLBACK_TYPE.END) { // this must be thread safe var currentSynchronizationContext = TaskScheduler.FromCurrentSynchronizationContext(); var uiTask = Task.Factory.StartNew(() => { var action = this.playNextFileAction; if (action != null) { action(); } }, CancellationToken.None, TaskCreationOptions.None, currentSynchronizationContext); } return(FMOD.RESULT.OK); }
/// <summary> /// Main handler for playback-end callback. /// </summary> /// <param name="channelraw"></param> /// <param name="controltype"></param> /// <param name="type"></param> /// <param name="commanddata1"></param> /// <param name="commanddata2"></param> /// <returns></returns> protected RESULT DispatchEndCallback( IntPtr channelraw, CHANNELCONTROL_TYPE controltype, CHANNELCONTROL_CALLBACK_TYPE type, IntPtr commanddata1, IntPtr commanddata2) { // There are several callback types if (type == CHANNELCONTROL_CALLBACK_TYPE.END) { if (allChannels.ContainsKey(channelraw)) { MediaObject sndobj = allChannels[channelraw]; return(sndobj.EndCallbackHandler()); } } return(RESULT.OK); }