使用System.Action有多贵?

时间:2015-05-28 18:21:46

标签: c# wpf

我遇到的情况是,当方法完成运行时,我依赖System.Action来清理我的UI。因为可以从应用程序的不同点调用此方法,所以清理操作可能会有很大不同。

我担心他们可能会很贵,而且我应该找到另一种方法来处理这种情况。

MoveObject(myControl, new Thickness(0, 1, 2, 3), a =>
                        {
                            myButton.IsEnabled = true;
                            myGrid.IsEnabled = true;
                            myComboBox.SelectedIndex = 0;
                            Mouse.OverrideCursor = null;
                        });

private void MoveObject(FrameworkElement control, Thickness margins, Action<wMain> action, double speedCoefficient = 1)
    {
        var speed = new TimeSpan(Convert.ToInt64(_defaultAnimationSpeed.Ticks*speedCoefficient));
        var animation = new ThicknessAnimation
        {
            From = control.Margin,
            To = margins,
            Duration = speed
        };
        var finalAction = new Action<wMain>(a =>
        {
            action(this);
            control.BeginAnimation(MarginProperty, null); //Clear the animation so the property can be set manually.
            control.Margin = margins;
        });
        animation.Completed += (sender, args) => { Dispatcher.BeginInvoke(finalAction, this); };
        control.BeginAnimation(MarginProperty, animation);
    }

我有时也会通过编写action(this);而不是调用Dispatcher来执行操作。一个比另一个好吗?

1 个答案:

答案 0 :(得分:4)

委托调用相当便宜;别担心。

如果您不在UI线程上,则只需要调度程序。