为什么这不起作用? 我不明白这里出了什么问题。 。
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;
}
答案 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;
}