Beispiel #1
0
        private int _handledOnWindowClosed = 0; //!!! temporal: OnWindowClosed fired twice
        void mainWindow_Closed(object sender, EventArgs e)
        {
            if (_handledOnWindowClosed++ > 0)
            {
                return;
            }

            Console.WriteLine(">>>> OnWindowClosed <<<<");

            // stop render thread
            lock (_renderLock) {
                _closingWindow = true;
            }
            _eventRenderDoWork.Set(); // unblock RenderThread()
            _threadRender.Join();
            _threadRender = null;


            SaveAppSettings();

            _mainBitmap.DisposeAll();

            // Sound
#if USE_MIDI
            if (_midiPlayer != null)
            {
                _midiPlayer.StopClock();
                _midiPlayer.Dispose();
                _midiPlayer = null;
            }
#endif
#if USE_WAVE
            if (_waveEngine != null)
            {
                _waveEngine.Stop();
                _waveEngine.Dispose();
                _waveEngine = null;
            }
#endif



#if USE_PERF
            Console.WriteLine("Performance counters");
            Console.WriteLine(_perfUpdateItems.GetReport());
            Console.WriteLine(_perfDrawItems.GetReport());
            Console.WriteLine(_perfRenderImage.GetReport());
            Console.WriteLine(_perfCopyPixels.GetReport());
#endif
        }