我遇到的情况是,当方法完成运行时,我依赖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来执行操作。一个比另一个好吗?
答案 0 :(得分:4)
委托调用相当便宜;别担心。
如果您不在UI线程上,则只需要调度程序。