C# XP Sound QuickFix
- by ikurtz
I have this:
ThreadPool.QueueUserWorkItem(new WaitCallback(FireAttackProc), fireResult);
and FireAttackProc:
    private void FireAttackProc(Object stateInfo)
    {
        // Process Attack/Fire (local)
        lock (_procLock)
        {
            // build status message
            String status = "(Away vs. Home)";
            // get Fire Result state info
            FireResult fireResult = (FireResult)stateInfo;
            // update home grid with attack information
            GameModel.HomeCellStatusSet(fireResult.FireGridLocation, Cell.cellState.Lock);
            this.Invoke(new Action(delegate() { RefreshHomeGrid(); }));
            status = status + "(Attack Coordinate: (" + GameModel.alphaCoords(fireResult.FireGridLocation.Column) +
                "," + fireResult.FireGridLocation.Row + "))(Result: ";
            // play audio data if true
            if (audio)
            {
                String Letters;
                Stream stream;
                SoundPlayer player;
                Letters = GameModel.alphaCoords(fireResult.FireGridLocation.Column);
                stream = Properties.Resources.ResourceManager.GetStream("_" + Letters);
                player = new System.Media.SoundPlayer(stream);
                player.PlaySync();
                Letters = fireResult.FireGridLocation.Row.ToString();
                stream = Properties.Resources.ResourceManager.GetStream("__" + Letters);
                player = new System.Media.SoundPlayer(stream);
                player.PlaySync();
                stream.Dispose();
                player.Dispose();
            }
            if (audio)
            {
                SoundPlayer fire = new SoundPlayer(Properties.Resources.fire);
                fire.PlaySync();
                fire.Dispose();
            }
            // deal with hit/miss
            switch (fireResult.Hit)
            {
                case true:
                    this.Invoke(new Action(delegate()
                    {
                        GameModel.HomeCellStatusSet(fireResult.FireGridLocation, Cell.cellState.Hit);
                        status = status + "(Hit)";
                    }));
                    if (audio)
                    {
                        SoundPlayer hit = new SoundPlayer(Properties.Resources.firehit);
                        hit.PlaySync();
                        hit.Dispose();
                    }
                    break;
                case false:
                    this.Invoke(new Action(delegate() 
                    {
                        GameModel.HomeCellStatusSet(fireResult.FireGridLocation, Cell.cellState.Miss);
                        status = status + "(Miss)";
                    }));
                    GameModel.PlayerNextTurn = NietzscheBattleshipsGameModel.GamePlayers.Home;
                    if (audio)
                    {
                        SoundPlayer miss = new SoundPlayer(Properties.Resources.firemiss);
                        miss.PlaySync();
                        miss.Dispose();
                    }
                    break;
            }
            // refresh home grid with updated data
            this.Invoke(new Action(delegate() { RefreshHomeGrid(); }));
            GameToolStripStatusLabel.Text = status + ")";
            // deal with ship destroyed
            if (fireResult.ShipDestroyed)
            {
                status = status + "(Destroyed: " + GameModel.getShipDescription(fireResult.DestroyedShipType) + ")";
                if (audio)
                {
                    Stream stream;
                    SoundPlayer player;
                    stream = Properties.Resources.ResourceManager.GetStream("_home");
                    player = new System.Media.SoundPlayer(stream);
                    player.PlaySync();
                    player.Dispose();
                    stream.Dispose();
                    string ShipID = fireResult.DestroyedShipType.ToString();
                    stream = Properties.Resources.ResourceManager.GetStream("_" + ShipID);
                    player = new System.Media.SoundPlayer(stream);
                    player.PlaySync();
                    player.Dispose();
                    stream.Dispose();
                    stream = Properties.Resources.ResourceManager.GetStream("_destroyed");
                    player = new System.Media.SoundPlayer(stream);
                    player.PlaySync();
                    player.Dispose();
                    stream.Dispose();
                }
            }
            // deal with win condition
            if (fireResult.Win)
            {
                if (audio)
                {
                    Stream stream;
                    SoundPlayer player;
                    stream = Properties.Resources.ResourceManager.GetStream("_home");
                    player = new System.Media.SoundPlayer(stream);
                    player.PlaySync();
                    player.Dispose();
                    stream = Properties.Resources.ResourceManager.GetStream("_loses");
                    player = new System.Media.SoundPlayer(stream);
                    player.PlaySync();
                    player.Dispose();
                }
                GameModel.gameContracts = new GameContracts();
            }
            // update status message
            if (fireResult.Hit)
            {
                if (!fireResult.Win)
                {
                    status = status + "(Turn: Away)";
                    LockGUIControls();
                }
            }
            // deal with turn logic
            if (GameModel.PlayerNextTurn == NietzscheBattleshipsGameModel.GamePlayers.Home)
            {
                this.Invoke(new Action(delegate()
                {
                    if (!fireResult.Win)
                    {
                        status = status + "(Turn: Home)";
                        AwayTableLayoutPanel.Enabled = true;
                    }
                }));
            }
            // deal with win condition
            if (fireResult.Win)
            {
                this.Invoke(new Action(delegate()
                {
                    status = status + "(Game: Home Loses)";
                    CancelToolStripMenuItem.Enabled = false;
                    NewToolStripMenuItem.Enabled = true;
                    LockGUIControls();
                }));
            }
            // display completed status message
            GameToolStripStatusLabel.Text = status + ")";
        }
    }
The issue is this:
Under Vista/win7 the sound clips in the FireAttackProc plays.
But under XP the logic contained within FireAttackProc gets executed but none of the sound clips play.
Is there a quick solution to this so the sound will play under XP?
I ask for a quick solution because i am happy being able to execute fully in Vista/Win7 but would be great if there was a quick solution so it would be XP compitable also.
Thank you.