public static void SoundSiren(int sirenNumber, int siren, Ask form = null) { var o = new object(); System.Threading.ThreadPool.QueueUserWorkItem ( delegate { System.Windows.Media.MediaPlayer player = new System.Windows.Media.MediaPlayer(); player.Volume = Form1.opts[Form1.optsName[28], 0] / 100.0; bool notWindows = form != null && !(!form.form.notWindows && !form.form.noReaction) ? true : false; // var sp = new System.Media.SoundPlayer(s); int i = 0; if (sirenNumber == 1) { player.Open(new Uri("Resources/siren.wav", UriKind.Relative)); } if (sirenNumber == 2) { player.Open(new Uri("Resources/sirenimp.wav", UriKind.Relative)); } if (form != null && form.form.shortSiren && siren > Form1.opts[Form1.optsName[33], 0]) { siren = Form1.opts[Form1.optsName[33], 0]; } while (!player.NaturalDuration.HasTimeSpan) { Thread.Sleep(20); } var ts = player.NaturalDuration.TimeSpan; //ts.Subtract(new TimeSpan(0, 0, 0, 0, 1)); for (; i < siren; i++) { if (Program.mainForm.ежимСмотрюФильмВключён() || Program.mainForm.noRelaxTime) { return; } //player.Open(new Uri("Resources/sirenimp.wav", UriKind.Relative)); player.Position = new TimeSpan(0); player.Play(); lock (o) Monitor.Wait(o, ts.Milliseconds + 1000 * ts.Seconds - 20); while (player.Position < ts) { Thread.Sleep(20); } player.Stop(); if (Form1.locked || (form != null && form.isSirenSolutionExist)) { for (int j = 0; j < 20; j++) { lock (o) Monitor.Wait(o, 500); if (!(Form1.locked || (form != null && form.isSirenSolutionExist))) { break; } } if ( Form1.locked || (form != null && form.isSirenSolutionExist) || (notWindows != (form != null && !(!form.form.notWindows && !form.form.noReaction) ? true : false)) ) { return; } } } } ); }