在没有Reactive Extensions的情况下限制C#事件处理程序

时间:2014-10-06 15:28:24

标签: c# events race-condition

我试图在不使用被动扩展的情况下限制事件。我会使用RX但是当我只需要限制一个事件时它看起来有点沉重。以下代码中是否存在任何问题?我特别关注种族状况。

public class MyClass
{
    private System.Timers.Timer _eventThrottle;

    public MyClass()
    {
        _myEventSource.SomeEvent += MyEventHandler;

        _eventThrottle = new System.Timers.Timer(500) { AutoReset = false };
        _eventThrottle.Elapsed += (o, a) =>
        {
            // System.Timers.Timer runs on another thread.
            // Dispatcher puts us back on the UI thread.
            Application.Current.Dispatcher.Invoke(() =>
            {
                // Handle Event
            }, DispatcherPriority.Render);
        };
    }

    private void MyEventHandler(object sender, EventArgs e)
    {
        _eventThrottle.Stop();
        _eventThrottle.Start();
    }
}

0 个答案:

没有答案