BackColor 属性 代码中的更改不正确。关于我做错了什么的任何想法?
BackColor property not changing properly in code. Any ideas as to what I'm doing wrong?
这里是中级 C# 开发人员。试图通过编写一个简单的 Simon 克隆来过渡到游戏编程(仅供个人学习,我不拥有任何版权或打算 distribute/sell),但我被卡住了。
这里是完整代码的 link:Simon
问题出在下面的PlayTile()
方法上:
private void PlayTile(Button btnColorOfTile, Color lightedTileColor, SoundPlayer tileSoundPlayer, Color originalTileColor)
{
// ***BUG03***
TilePress(btnColorOfTile, lightedTileColor, tileSoundPlayer);
// Small pause so tile can be lit before instantly changing back
Thread.Sleep(SLEEP_TIME);
TileRelease(btnColorOfTile, originalTileColor, tileSoundPlayer);
// Small pause between each tile play so that you can distingish multiple plays of the same tile.
Thread.Sleep(SLEEP_TIME);
}
这是假设通过改变BackColor
属性到"light"向上的磁贴,暂停半秒(SLEEP_TIME
设置为 500 毫秒),同时播放方块的声音,并将 BackColor
改回正常颜色。
声音在暂停和其他一切情况下正常播放,但瓷砖没有改变颜色。我在 TilePress()
中更改了 BackColor
属性 并在 TileRelease()
中将其更改回 TileRelease()
,它在 MouseUp 和 MouseDown 中为图块的事件处理程序调用并且工作正常。
知道为什么 PlayTile()
对声音有效但没有改变 BackColor
属性 吗?
此外,如果您在代码中看到任何明显的错误,请告诉我。这对我来说都是为了学习,所以需要建设性的批评。
在此先感谢您的帮助!
Thread.Sleep 阻塞了您的 UI 线程(这意味着您的表单无法处理任何 window 消息,例如键盘、鼠标、移动、绘图等。它是一个 "Not Responding" 状态而不是期望的行为)。
您可以使用 async/await。
示例:
async Task PlayTile()
{
this.BackColor = Color.Red;
await Task.Delay(500);
this.BackColor = Color.White;
await Task.Delay(500);
}
async private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
{
await PlayTile();
}
}
这里是中级 C# 开发人员。试图通过编写一个简单的 Simon 克隆来过渡到游戏编程(仅供个人学习,我不拥有任何版权或打算 distribute/sell),但我被卡住了。
这里是完整代码的 link:Simon
问题出在下面的PlayTile()
方法上:
private void PlayTile(Button btnColorOfTile, Color lightedTileColor, SoundPlayer tileSoundPlayer, Color originalTileColor)
{
// ***BUG03***
TilePress(btnColorOfTile, lightedTileColor, tileSoundPlayer);
// Small pause so tile can be lit before instantly changing back
Thread.Sleep(SLEEP_TIME);
TileRelease(btnColorOfTile, originalTileColor, tileSoundPlayer);
// Small pause between each tile play so that you can distingish multiple plays of the same tile.
Thread.Sleep(SLEEP_TIME);
}
这是假设通过改变BackColor
属性到"light"向上的磁贴,暂停半秒(SLEEP_TIME
设置为 500 毫秒),同时播放方块的声音,并将 BackColor
改回正常颜色。
声音在暂停和其他一切情况下正常播放,但瓷砖没有改变颜色。我在 TilePress()
中更改了 BackColor
属性 并在 TileRelease()
中将其更改回 TileRelease()
,它在 MouseUp 和 MouseDown 中为图块的事件处理程序调用并且工作正常。
知道为什么 PlayTile()
对声音有效但没有改变 BackColor
属性 吗?
此外,如果您在代码中看到任何明显的错误,请告诉我。这对我来说都是为了学习,所以需要建设性的批评。
在此先感谢您的帮助!
Thread.Sleep 阻塞了您的 UI 线程(这意味着您的表单无法处理任何 window 消息,例如键盘、鼠标、移动、绘图等。它是一个 "Not Responding" 状态而不是期望的行为)。
您可以使用 async/await。
示例:
async Task PlayTile()
{
this.BackColor = Color.Red;
await Task.Delay(500);
this.BackColor = Color.White;
await Task.Delay(500);
}
async private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
{
await PlayTile();
}
}