为什么这个方法每次调用时都会执行两次?

时间:2010-04-15 20:45:17

标签: wpf methods c#-4.0

我有以下方法,每次调用时都执行两次:

public static void ChangeToRepository(RepositoryTextBox textBox, int repositoryNumber)
    {
        MessageBox.Show("you");
        int indexOfLastRepository = (textBox.RepositoryCollection.Count - 1);
        if (repositoryNumber > indexOfLastRepository)
        {
            AddTextRepositoriesThrough(textBox, repositoryNumber, indexOfLastRepository);
        }
        textBox.RepositoryCollection[textBox.CurrentRepositoryNumber].CurrentText = textBox.Text;
        textBox.PreviousRepositoryNumber = textBox.CurrentRepositoryNumber;
        textBox.CurrentRepositoryNumber = repositoryNumber;
        textBox.Text = textBox.RepositoryCollection[textBox.CurrentRepositoryNumber].CurrentText;
    }

第一次执行该方法时,它会执行除最后一行之外的所有代码:

textBox.Text = textBox.RepositoryCollection[textBox.CurrentRepositoryNumber].CurrentText;

第二次,它执行所有代码。怎么了?

1 个答案:

答案 0 :(得分:0)

当您在文本框中分配CurrentRepositoryNumber时,它可能会触发一个再次回调此函数的事件处理程序。这似乎很可能是因为属性名称表明它控制着当前的存储库,然后该方法负责以某种方式显示。

您可能希望临时删除,分配给该属性,然后重新登记该事件处理程序。或者你可能需要更多的重新设计才能明确责任 - 通常使用很难做的GUI框架,而最简单的选择就是使用这种模式进行删除,分配,重新登记:

textBox.TextChange -= YourHandler;
textBox.Text = newValue;
textBox.TextChange += YourHandler;