/// <summary> /// Multimedia timer tick handler. /// </summary> void TimerElapsedEvent(object sender, MmTimerEx.TimerEventArgs e) { // Kick over to main UI thread. BeginInvoke((MethodInvoker) delegate() { if (_script != null) { // Process any events. while (_pmidiEvents.TryDequeue(out PMidiEvent mevt)) { _script.midiEvent(mevt); } // Update the view. NextDraw(e); } }); }
/// <summary> /// Output next frame. /// </summary> /// <param name="e">Information about updates required.</param> void NextDraw(MmTimerEx.TimerEventArgs e) { InitRuntime(); if (e.ElapsedTimers.Contains("UI") && btnPlay.Checked && !_needCompile) { try { _surface.UpdateSurface(); } catch (Exception ex) { ScriptRuntimeError(new Surface.RuntimeErrorEventArgs() { Exception = ex }); } } // Process whatever the script did. ProcessRuntime(); }