예제 #1
0
 /// <summary>
 /// 窗体关闭事件
 /// </summary>
 public void ClosingCommandFunc(object sender, CancelEventArgs e)
 {
     if (wo != null)
     {
         wo.Stop();
         wo.Dispose();
     }
     if (mp3FileReader != null)
     {
         mp3FileReader.Close();
         mp3FileReader.Dispose();
     }
     if (getCurrrentTime_th != null)
     {
         if ((getCurrrentTime_th.ThreadState & ThreadState.Running) == ThreadState.Running || (getCurrrentTime_th.ThreadState & ThreadState.Suspended) == ThreadState.Suspended)
         {
             getCurrrentTime_th.Abort();
         }
     }
     System.Environment.Exit(0);
 }
예제 #2
0
        internal static void StartAmbientLoop()
        {
            var athread = new Thread(() =>
            {
                MemoryStream str = null;
                NAudio.Wave.Mp3FileReader mp3 = null;
                NAudio.Wave.WaveOut o         = null;
                bool shuttingDown             = false;

                Engine.AppearanceManager.OnExit += () =>
                {
                    shuttingDown = true;
                    o?.Stop();
                    o?.Dispose();
                    mp3?.Close();
                    mp3?.Dispose();
                    str?.Close();
                    str?.Dispose();
                };
                while (shuttingDown == false)
                {
                    if (Engine.SaveSystem.CurrentSave != null)
                    {
                        if (Engine.SaveSystem.CurrentSave.MusicEnabled)
                        {
                            str = new MemoryStream(GetRandomSong());
                            mp3 = new NAudio.Wave.Mp3FileReader(str);
                            o   = new NAudio.Wave.WaveOut();
                            o.Init(mp3);
                            bool c = false;
                            o.Play();
                            o.PlaybackStopped += (s, a) =>
                            {
                                c = true;
                            };

                            while (!c)
                            {
                                if (Engine.SaveSystem.CurrentSave.MusicEnabled)
                                {
                                    try
                                    {
                                        o.Volume = (float)Engine.SaveSystem.CurrentSave.MusicVolume / 100;
                                    }
                                    catch { }
                                }
                                else
                                {
                                    o.Stop();
                                    c = true;
                                }
                                Thread.Sleep(10);
                            }
                        }
                        else
                        {
                            Thread.Sleep(10);
                        }
                    }
                    else
                    {
                        Thread.Sleep(10);
                    }
                }
            });

            athread.IsBackground = true;
            athread.Start();
        }