代码之家  ›  专栏  ›  技术社区  ›  Wired365

情节提要。已完成的事件处理程序阻止代码执行

  •  0
  • Wired365  · 技术社区  · 10 年前

    我正在尝试创建一个基于用户输入的动画模拟程序。当我尝试为mystoryboard.completed事件创建事件处理程序时,遇到了一个错误。我已经阅读了许多不同的API文章和论坛帖子,内容涉及事件处理和故事板,但我似乎找不到错误的原因。

    我的代码会编译,窗口会显示,但在我设置事件处理程序的那一行之后的任何内容都不会执行。我设置所有内容的主窗口如下所示。

    public MainWindow()
            {
                InitializeComponent();
                titleTextBlock.Text = "MainWindow()";
                //this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
            }
    
            private void MainWindow_Loaded(object sender, RoutedEventArgs e)
            {
                mainSystem = new BalanceSystem(3);
                leftBlock = new SystemComponents.Block(0, 100, 150, 100, mainSystem);
                rightBlock = new SystemComponents.Block(1, 100, 150, 100, mainSystem);
                balanceBeam = new SystemComponents.Bar(0, 0, 250, 150, 100, mainSystem);
                mainSystem.addComponent(leftBlock, leftWeight);
                mainSystem.addComponent(rightBlock, rightWeight);
                mainSystem.addComponent(balanceBeam, balanceBar);
    
                titleTextBlock.Text = "LOADED";
            }
    

    “BalanceSystem”的构造函数是当事情开始出错时。它进入如下所示的构造函数:

    public BalanceSystem(int count)
    {
        componentCount = count;
        masterTimeline = new MovementTimeline(1);
    }
    

    在输入“BalanceSystem”的构造函数后,它将转到我的自定义类“MovementTimeline”的构造函数。打破一切的是masterStoryboard.Completed的事件处理程序的创建和订阅。

    class MovementTimeline
    {
        private Storyboard masterStoryboard;
        private Duration systemDuration;
    
        public MovementTimeline(int totalTime)
        {
            systemDuration = new Duration(TimeSpan.FromSeconds(totalTime));
            masterStoryboard.Completed += new EventHandler(masterStoryboard_Completed);
    
        }
    
        void masterStoryboard_Completed(object sender, EventArgs e)
        {
            masterStoryboard.Children.Clear();
            //masterStoryboard.Completed -= masterStoryboard_Completed;
        }
     }
    

    一旦编译器或程序到达创建新EventHandler的行,它就会停止执行我的其余代码并按原样加载窗口。

    1 回复  |  直到 10 年前
        1
  •  0
  •   Core-One    10 年前

    在我看来,您添加了一个事件处理程序,而从未创建StoryBoard对象