首当其冲的C#方法问题

首当其冲的C#方法问题,c#,winforms,C#,Winforms,每当我在VisualStudio中运行我的“比赛日”游戏时,我都会遇到一个奇怪的问题。所以基本上我是在处理表单。我有4个带狗照片的图片盒。狗的信息存储在一个数组中。每次比赛后,我都想把这些照片放回起跑线上。所以我提出了一个方法: public void SetToStartingPosition() { for (int j=0; j < GreyhoundArray.Length; j++) { GreyhoundArray[j].MyPictureBox

每当我在VisualStudio中运行我的“比赛日”游戏时,我都会遇到一个奇怪的问题。所以基本上我是在处理表单。我有4个带狗照片的图片盒。狗的信息存储在一个数组中。每次比赛后,我都想把这些照片放回起跑线上。所以我提出了一个方法:

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;
        } `