Timer C# 中的匿名函数

Anonymous functions in Timer C#

为什么这是行不通的? 我不明白这里有什么问题。 . .

  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;
        }

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

那么你不需要将 Label 作为 ref 参数传递,因为你不想更改方法内部的引用。此外,由于您没有 returning 任何东西,您可以从 Timer _T 中删除 out,而 return 计时器。标签 d 是不必要的,您可以将 _ChangeImageEllipse 直接发送到 EllipseVisible_Tick 方法,但由于该方法只做一件小事,因此可能根本不需要该方法。

我会这样重构它:

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;
}