C# System.Timers.Timer随每次迭代而衰减

C# System.Timers.Timer随每次迭代而衰减,c#,wpf,timer,C#,Wpf,Timer,好的,我正在学习C/.NET,到目前为止我一直坚持使用winforms,但是WPF似乎适合这个项目 我有一个WrapPanel,可以显示一组图像。有时,此阵列会超出窗口的范围。我试图循环浏览页面,直到所有图像都使用计时器显示 我将在计时器已过事件处启动代码示例,此时我的WrapPanel wrapPanel1已经填充并检查是否存在溢出: public void t2_Elapsed(object source, ElapsedEventArgs e) { wrapPan

好的,我正在学习C/.NET,到目前为止我一直坚持使用winforms,但是WPF似乎适合这个项目

我有一个WrapPanel,可以显示一组图像。有时,此阵列会超出窗口的范围。我试图循环浏览页面,直到所有图像都使用计时器显示

我将在计时器已过事件处启动代码示例,此时我的WrapPanel wrapPanel1已经填充并检查是否存在溢出:

public void t2_Elapsed(object source, ElapsedEventArgs e)
    {

        wrapPanel1.Dispatcher.BeginInvoke((ThreadStart)delegate 
        {
            remaining = Convert.ToInt32(imgCount) - (iteration*xDensity);

            label1.Content = iteration;
            label2.Content = remaining;
            label3.Content = imgCount;

            if (remaining <= 1)
            {
                Thickness marginTop = wrapPanel1.Margin;
                marginTop.Top = 0;
                wrapPanel1.Margin = marginTop;
                wrapPanel1.Children.Clear();
                t2.Stop();
                imgLayout();
            }

            else
            {
                Thickness marginTop = wrapPanel1.Margin;
                marginTop.Top = -((prevResY+10) * iteration);
                wrapPanel1.Margin = marginTop;
                iteration++;
            }
        });
    }
线路。我把它移走,让它充满,我没有得到任何延迟,但这显然不是最终的解决方案。无论我把这条线放在哪里,它都会重现问题

--更新2--

我现在觉得自己很笨。在前面启动计时器的imgLayout方法中,我使用了:

t2.Interval = new TimeSpan(0, 0, 0, 0, 5000);
t2.Tick += new EventHandler(t2_Tick);
t2.Start();

每次循环重新启动时,我都愚蠢地声明了事件处理程序。我改为在Window_Loaded方法中设置它,现在它的工作方式完全符合人们的预期,只是稍微整理一下,实现了一种一次滚动一整页而不是一行的方式。

在处理WPF中的重复操作时,建议使用它。它将在dispather线程上自动执行其代码,而无需启动。建议在处理WPF中的重复操作时使用它。它将在dispather线程上自动执行其代码,而无需启动。谢谢,我将计时器更改为Dispatcher。timer,我不知道!内存使用率下降了,但总体问题仍然存在。@RMilne:不管怎样,很高兴你发现了这个问题。我对什么地方出了问题真的没什么想法了。也许你应该把答案和解决方案一起贴出来,并将其标记为已接受谢谢,我把计时器改成了调度。计时器,我不知道!内存使用率下降了,但总体问题仍然存在。@RMilne:不管怎样,很高兴你发现了这个问题。我对什么地方出了问题真的没什么想法了。也许你应该把答案和解决方案一起贴出来,并将其标记为已接受您正在显示多少图像?似乎无法在合理的时间内清除/处置这些图像。为了进行测试,我有一个包含9个图像的文件夹,设置为每次显示4个。在现实世界中,它在任何给定的时间都可能需要处理多达60个图像。您要显示多少个图像?似乎无法在合理的时间内清除/处置这些图像。为了进行测试,我有一个包含9个图像的文件夹,设置为每次显示4个。在现实世界中,它可能在任何给定的时间都必须处理多达60个。
t2.Interval = new TimeSpan(0, 0, 0, 0, 5000);
t2.Tick += new EventHandler(t2_Tick);
t2.Start();