如何在全球范围内收听计时器滴答声?

阿克斯帕

我想在我的 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();
            }));
        }
    }
在 Mainwindow 我添加了一个按钮来实例化并显示多个 window1

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Window win = new Window1();
            win.Show();
        }
当我旋转它并多次单击按钮时,我有 3 个 window1 实例并且它们的动画是同步的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计时器滴答声增加

来自分类Dev

嵌套计时器?多个同时的计时器滴答声中的逻辑故障

来自分类Dev

计时器似乎没有滴答声(直到我最小化窗口)

来自分类Dev

在AWS SWF工作流中安排的计时器能否无法传递滴答声?

来自分类Dev

计时器触发滴答声事件,延迟时间为15毫秒

来自分类Dev

$(this)如何在全球范围内可用

来自分类Dev

如何停止计时器滴答

来自分类Dev

如何从计时器获取滴答数

来自分类Dev

在固定间隔后如何运行骆驼计时器,但仅在给定的时间范围内

来自分类Dev

Clojure:如何在全球范围内启用规范断言?

来自分类Dev

如何在全球范围内通过npm安装?

来自分类Dev

在计时器滴答作响之后,如何在Java中更改标签文本?

来自分类Dev

如何在调度程序计时器滴答中获取任务的结果?

来自分类Dev

如何在方形手表上绘制表面“滴答声”?

来自分类Dev

如何降低winforms计时器的滴答率?

来自分类Dev

来自PC扬声器的定期滴答声

来自分类Dev

测量C中的处理器滴答声

来自分类Dev

systemd计时器:仅在特定时间范围内启用服务

来自分类Dev

样式RadSlider滴答声

来自分类Dev

显示点击滴答声

来自分类Dev

MIDI滴答滴答声是毫秒吗?

来自分类Dev

更改计时器滴答事件的参数

来自分类Dev

计时器滴答事件未触发

来自分类Dev

计时器滴答错误数值

来自分类Dev

更改计时器滴答事件的参数

来自分类Dev

计时器滴答事件未触发

来自分类Dev

jQuery $如何初始化?如何在全球范围内使用?

来自分类Dev

全球范围内的职能

来自分类Dev

如何在全球范围内安装Dart软件包?