如何在WPF应用程序中开始执行计时器功能

时间:2014-03-19 08:29:33

标签: c# wpf timer

大家好日子。 任何人都可以告诉我,当我的应用程序启动时,我怎样才能每秒重复执行我的功能?我根据我在这里和谷歌找到的一些例子设置了计时器。但是,当我运行我的应用程序时,没有任何事情发生。

这是代码

  public void kasifikuj()
    {
        if (File.Exists(@"E:\KINECT\test.txt"))
        {
            File.Delete(@"E:\KINECT\test.txt");
        }
        File.AppendAllText(@"E:\KINECT\test.txt", shoulderRightY + " " + shoulderLeftY + " " + headY + " " + hipY + Environment.NewLine);

        double detect = Program.siet();
        vysledok.Text = detect.ToString();


    }

    private Timer timer1;
    public void InitTimer()
    {
        timer1 = new Timer();
        timer1.Tick += new EventHandler(timer1_Tick);
        timer1.Interval = 1000; // in miliseconds
        timer1.Start();
    }

    public void timer1_Tick(object sender, EventArgs e)
    {
        kasifikuj();
    }

编辑:

或者你能建议另一种方法来每秒运行我的kasifikuj()方法吗?

4 个答案:

答案 0 :(得分:0)

也许它与某些事情有关:

您没有调用您的函数InitTimer,或者您没有启用计时器。我使用c #WindowsFormsApplications。我不知道这是否与WPF不同。

我希望它有所帮助

答案 1 :(得分:0)

主要是RvA是正确的,你不是在调用InitTimer,或者至少不是你在问题中提供的代码。

当你调用InitTimer时,你的代码应该运行得很好。 但是我建议你看一下TPL(Task Parallel Libary),这个问题在这个stackoverflow问题中有所解释:Proper way to implement a never ending task. (Timers vs Task)

答案 2 :(得分:0)

我在这里找到了类似的东西,我想......在这里

 public static class DelayedExecutionService
{
    public static void DelayedExecute(Action action, int delay = 1)
    {
        var dispatcherTimer = new System.Windows.Threading.DispatcherTimer();

        EventHandler handler = null;
        handler = (sender, e) =>
        {
            // Stop the timer so it won't keep executing every X seconds
            // and also avoid keeping the handler in memory.
            //dispatcherTimer.Tick -= handler;
            //dispatcherTimer.Stop();

            // Perform the action.
            action();
        };

        dispatcherTimer.Tick += handler;
        dispatcherTimer.Interval = TimeSpan.FromSeconds(delay);
        dispatcherTimer.Start();
    }
}

像这样使用

DelayedExecutionService.DelayedExecute(RefreshLList, 1);
DelayedExecutionService.DelayedExecute(UpdateLList, 1);

其中RefreshLList和UpdateLList定义为void func();

希望这有帮助。

答案 3 :(得分:0)

您应该订阅Window的Loaded事件并在事件处理程序中调用InitTimer()函数:

    public SomeWindow()
    {
        Loaded += SomeWindow_Loaded;
    }

    private void SomeWindow_Loaded(object sender, RoutedEventArgs e)
    {
        InitTimer();
    }