我想在我的 wpf c# 应用程序中有一个主计时器,它的计数/运行独立于当前显示的页面。我的软件在运行时创建了不同的自定义控件,在这些控件中,我需要能够监听主滴答声。
namespace window6
{
public partial class Window6 : Window
{.......
我已经尝试过这个:
public static DispatcherTimer GlobalTimer = new DispatcherTimer();
GlobalTimer.Interval = TimeSpan.FromMilliseconds(500);
GlobalTimer.IsEnabled = true;
然后在任何自定义控件上我触发一个计时器事件:
window6.Window6.GlobalTimer.Tick += (global_Elapsed);
问题是这段代码就像我使用的每个自定义控件上的新计时器一样,因此每个计时器事件都会在每个自定义控件内触发,作为不同步运行的新计时器运行。不充当单个计时器。
不知何故,你不能引用同一个计时器。我创建了一个静态类:
using System.Timers;
namespace wpf_GlobalTimer
{
public static class TimerParent
{
public static Timer GlobalTimer { get; set; } = new Timer(3000)
{
AutoReset = true,
Enabled = true
};
}
}
然后我添加了一个带有动画的简单窗口:
<Window.Resources>
<Storyboard x:Key="TestStoryboard">
<DoubleAnimation
From="200"
To="0"
Storyboard.TargetProperty="(Rectangle.Height)"
Storyboard.TargetName="Rect"
FillBehavior="Stop"
Duration="0:0:2"
/>
</Storyboard>
</Window.Resources>
<Grid>
<Rectangle Name="Rect" Height="200" Fill="Green"/>
</Grid>
</Window>
public partial class Window1 : Window
{
private Timer timer = null;
private Storyboard sb = null;
public Window1()
{
InitializeComponent();
timer = TimerParent.GlobalTimer;
timer.Elapsed += OnTimedEvent;
sb = this.Resources["TestStoryboard"] as Storyboard;
}
private void OnTimedEvent(Object source, ElapsedEventArgs e)
{
Application.Current.Dispatcher.InvokeAsync(new Action(() =>
{
sb.Begin();
}));
}
}
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Window win = new Window1();
win.Show();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句