首当其冲的C#方法问题
每当我在VisualStudio中运行我的“比赛日”游戏时,我都会遇到一个奇怪的问题。所以基本上我是在处理表单。我有4个带狗照片的图片盒。狗的信息存储在一个数组中。每次比赛后,我都想把这些照片放回起跑线上。所以我提出了一个方法:首当其冲的C#方法问题,c#,winforms,C#,Winforms,每当我在VisualStudio中运行我的“比赛日”游戏时,我都会遇到一个奇怪的问题。所以基本上我是在处理表单。我有4个带狗照片的图片盒。狗的信息存储在一个数组中。每次比赛后,我都想把这些照片放回起跑线上。所以我提出了一个方法: public void SetToStartingPosition() { for (int j=0; j < GreyhoundArray.Length; j++) { GreyhoundArray[j].MyPictureBox
public void SetToStartingPosition()
{
for (int j=0; j < GreyhoundArray.Length; j++)
{
GreyhoundArray[j].MyPictureBox.Left = 0;
}
}
感谢您的帮助,这是我的堆栈溢出“carrer”的一个糟糕而糟糕的开始:(这听起来像是一个并发问题。实际上,有多个线程同时改变了狗的位置,导致了意外的行为。在不查看Run()的情况下查看
Run()方法的代码可能会很有用方法时,您的代码似乎是错误的。您正在调用GreyhoundArray[]。请运行两次
(一次单独运行,一次在第一个if
语句中)。看起来您应该删除GreyhoundArray[i]。运行();
本身在一行上,或者将该调用的结果存储在布尔变量中,并在if
语句中使用该变量,而不是对Run()的第二次调用
。但这很容易让你自己弄明白-学习使用调试器,并逐步检查代码,以准确查看代码是如何执行的,以及图像在不应该移动的情况下何时移动。我同意@KenWhite的观点,调用Run()
两次看起来确实不正确,但这并不能解释你看到的行为。(至少在没有看到运行函数的情况下)考虑修改标题,以便更清楚地说明您的问题是什么。“头先C#方法问题”没有告诉我任何事情。这听起来像是一个并发问题。本质上,有多个线程同时改变狗的位置,导致意外行为。查看Run()
method的代码可能会很有用。如果没有看到Run()方法,您的代码似乎是错误的。您正在调用GreyhoundArray[].Run
两次(一次单独运行,一次在第一个if
语句中运行)。看起来您应该删除本身在一行上的GreyhoundArray[i].Run();
,或者将该调用的结果存储在布尔变量中,并在if
语句中使用该变量,而不是第二次调用Run()
。但这很容易让你自己弄明白-学习使用调试器,并逐步检查代码,以准确查看代码是如何执行的,以及图像在不应该移动的情况下何时移动。我同意@KenWhite的观点,调用Run()
两次看起来确实不正确,但这并不能解释你看到的行为。(至少在没有看到run函数的情况下)考虑修改你的标题,让它更清楚你的问题是什么。“头先C#方法问题”没有告诉我任何事情。
public void timer1_Tick(object sender, EventArgs e)
{
for (int i = 0; i <GreyhoundArray.Length; i++)
{
GreyhoundArray[i].Run(); //method making PictureBoxes move to the right
if (GreyhoundArray[i].Run() == true) //GreyhoundArray[i].Run() is true when the race is finished
{
timer1.Stop();
**SetToStartingPosition();**
winDog = i;
MessageBox.Show("Dog number " + (winDog + 1) + " has won!");
groupBox1.Enabled = true;
button1.Text = "RESTART!";
for (int k =0; k < GuysArray.Length; k++)
{
if (GuysArray[k].MyBet != null)
{
GuysArray[k].Collect(winDog);
GuysArray[k].ClearBet();
GuysArray[k].UpdateLabels();
}
}
break;
}
}
}
` public bool Run()
{
if (MyPictureBox.Left > 600 - MyPictureBox.Width)
{
return true;
}
else
{
Location += MyRandom.Next(1, 4);
MyPictureBox.Left = StartingPosition + Location;
return false;
} `