我如何将DispatcherTimer设置为for循环

时间:2010-12-28 06:34:32

标签: wpf multithreading

我正在使用wpf DispatcherTimer,我想将它用于for循环我如何使用它..

我的代码在这里..

        DispatcherTimer timer = new DispatcherTimer();

        timer.Tick += (s, e) =>
        {
            for (i = 0; i < 10; i++)
            {
                obsValue.Add(new Entities(i));
                timer.Interval = TimeSpan.FromSeconds(30);
                timer.Start();
            }
        };

...谢谢

2 个答案:

答案 0 :(得分:3)

当您启动Interval设置为30 seconds的计时器时,其Tick事件将每30秒启动一次。

现在,我从你的问题中了解到你想要每隔30秒添加一条记录。

这是你能做的。请注意,它不需要for loop,但您仍需要维护当前索引。为此,您可以使用private fieldlocal variable with lambda

实施例

    DispatcherTimer timer = new DispatcherTimer();
    timer.Interval = TimeSpan.FromSeconds(30);

    Int32 index = 0, maxValue = 10;

    timer.Tick += (s, e) =>
    {                
        obsValue.Add(new Entities(index));
        index ++; // increment index

        // Stop if this event has been raised max number of times
        if(index > maxValue) timer.Stop();
    };

    timer.Start();

答案 1 :(得分:1)

我认为您误解了DispatcherTimer的工作原理。一旦调用Start(),每次到达Interval时都会触发Tick事件,即你启动它并重复滴答。你的代码应该是这样的:

    DispatcherTimer timer = new DispatcherTimer();
    timer.Interval = TimeSpan.FromSeconds(30);
    timer.Start();

    timer.Tick += (s, e) =>
    {
        for (i = 0; i < 10; i++)
        {
            obsValue.Add(new Entities(i));
        }
    };

这将每30秒添加10个新实体。