计时器C#中的匿名函数

时间:2018-08-19 16:07:23

标签: c# wpf timer label anonymous-function

为什么这不起作用? 我不明白这里出了什么问题。 。

  public static void Pause_ForCreate(out Timer _T,  ref Label _ChangeImageEllipse)
        {
            Label d = _ChangeImageEllipse;
            _T = new Timer(2000);
            // _T.Elapsed += EllipseVisible_Tick;
            _T.Elapsed += (sender, e) => EllipseVisible_Tick((object)d, e);
            _T.AutoReset = false;
            _T.Start();

        }
 private static void EllipseVisible_Tick(object Sender, ElapsedEventArgs E)
        {
           ((Ellipse)((Label)Sender).Content).Visibility = Visibility.Visible;
        }

1 个答案:

答案 0 :(得分:1)

您应该使用DispatcherTimer而不是Timer,因为它的Tick处理程序在UI线程中被调用(与Timer的Elapsed处理程序相对)

然后,您不需要将Label as ref作为参数传递,因为您不想在方法内部更改引用。另外,由于您不返回任何内容,因此可以从Timer _T中删除out,然后返回计时器。标签d是不必要的,您可以将_ChangeImageEllipse直接发送到EllipseVisible_Tick方法,但是由于该方法仅做一件事,因此可能根本不需要该方法。 / p>

我会这样重构它:

public static DispatcherTimer Pause_ForCreate(Label _ChangeImageEllipse)
{
    var t = new DispatcherTimer { Interval = TimeSpan.FromSeconds(2) };
    t.Tick += (s, e) => _ChangeImageEllipse.Visibility = Visibility.Visible;
    t.Start();
    return t;
}