如何在类中实现调度程序计时器并调用它

时间:2014-04-28 09:30:57

标签: c# wpf timer

所以我正在开发一个应用程序,它需要在第二页上计算每个页面的计时器。我认为最好将一个实际的函数放在一个类上,并让它由需要它的页面调用。我所知道的是如何让计时器在一个页面中工作......令我感到困惑的是如何让它在课堂上工作。

毋庸置疑,我失败了。

这是我在课堂上所做的:

    namespace Masca
    {
    public class timer
    {

    public void StartTimer()
    {
        System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
        dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
        dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
        dispatcherTimer.Start();
    }

    private void dispatcherTimer_Tick(object sender, EventArgs e)
    {
        DateTime datetime = DateTime.Now;
    }

我在页面中所做的事情我需要

中的计时器
namespace Masca
{

public partial class signup : Elysium.Controls.Window
{
    public timer timer;

    public signup(string Str_Value)
    {

        InitializeComponent();
        tag.Text = Str_Value;
    }

    public void dispatcherTimer_Tick(object sender, EventArgs e)
    {
        DateTime datetime = DateTime.Now;
        this.doc.Text = datetime.ToString();
    }

我无法得到'dispatcherTimer_Tick'事件,知道它应该从类'计时器'获得如何工作的说明。

关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:1)

您可能想要在计时器类中添加一个事件:

public class timer
{

public event EventHandler TimerTick;

private void dispatcherTimer_Tick(object sender, EventArgs e)
{
    if (TimerTick != null)
        TimerTick(this, null);
}

因此,在您的窗口中,您可以只听这个事件。

答案 1 :(得分:0)

您需要在timer课程中公开自己的事件或委托。外部类订阅此事件/委托,您可以从dispatcherTimer_Tick类中的timer方法引发/调用它。

我会在timer课程中执行类似的操作:

public delegate void TimeUp(); // define delegate

public TimeUp OnTimeUp { get; set; } // expose delegate

...

private void dispatcherTimer_Tick(object sender, EventArgs e)
{
    DateTime datetime = DateTime.Now;
    if (OnTimeUp != null) OnTimeUp(); // call delegate
}

来自课外:

public timer timer;  

...

timer.OnTimeUp += timerOnTimeUp;

private void timerOnTimeUp()
{
    // time is up
}