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.