Tuesday, March 1, 2011

WPF - Passing Arguments to Timer.Tick

Recently I worked on a projected that needed to animate objects based on a timer. I wanted to write a generic timer handler to perform an operation on the object passed in to the timer. Initially I tried messed with EventArgs passed to the event handler, but turns out there is an easier way - using the "Tag" property:

// Note: You can have only one DispatchTimer object per class
private DispatcherTimer _timer;

MyClass()
{
    // Timer Start Code
    var myObject = new SomeObject();
    _timer.Interval = TimeSpan.FromMilliseconds(700);
    _timer.Tag = myObject ;
    _timer.Tick += TimerTickEventHandler;
    _timer.Start();
}

private void TimerTickEventHandler(object  sender, EventArgs e)
{
    var timer = (DispatcherTimer)sender;
    var myObject = (SomeObject)timer.Tag;
    // now you can use myObject
    timer.Stop();
}

0 comments:

Post a Comment