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;
}
为什么这是行不通的? 我不明白这里有什么问题。 . .
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;
}