C# WinForm按钮背景图像仅每隔运行一次更新

C# WinForm按钮背景图像仅每隔运行一次更新,c#,winforms,image,C#,Winforms,Image,我希望在跑步过程中(我点击一个按钮开始)出现一个闪烁的LED——交替亮起,然后是图片盒中的一个暗图像。图像在跑步开始时亮起,跑步结束时变暗。这总是有效的 此代码: this.timer.SynchronizingObject = this; this.timer.Interval = 250; this.timer.Elapsed += (s, ea) => { this.ledLit = !this.ledLit; ShowInLog(this.ledLit ? "/"

我希望在跑步过程中(我点击一个按钮开始)出现一个闪烁的LED——交替亮起,然后是图片盒中的一个暗图像。图像在跑步开始时亮起,跑步结束时变暗。这总是有效的

此代码:

this.timer.SynchronizingObject = this;
this.timer.Interval = 250;
this.timer.Elapsed += (s, ea) =>
{
    this.ledLit = !this.ledLit;
    ShowInLog(this.ledLit ? "/" : "\\");
    this.picMarking.BackgroundImage = this.ledLit ? this.imageStopped : this.imageRunning;
    this.picMarking.Refresh();
};
非常适合在跑步过程中显示闪烁的LED图像…每隔一次跑步

在每次偶数调用中,交替斜杠的显示显示计时器正在工作,但背景图像不会更新(可能除了罕见的闪烁)


为什么??如何使它在每次调用时都能工作?

以下是我为您的“闪烁”效果编写的一些快速代码:


我已经为计时器上的滴答事件使用了事件处理程序来触发闪烁。你可以像我使用BackColor属性一样调整图像。这是一种快速而肮脏的方法,但它实现了闪烁效果。

我在这里找到了问题的答案:


我的问题是,我每次都订阅了勾号事件,而不是只订阅一次。

首先你说:“跑步开始时图像会亮,跑步结束时图像会变暗。这总是有效的。”然后你说:“在跑步过程中显示闪烁的LED图像非常有效……每隔一次跑步。”这两种说法似乎不一致,你能再清楚一点吗?在跑步开始时,我将图像设置为亮起。这很有效。在跑步结束时,我将图像设置为暗。这很有效。在奇数运行时,当计时器启动时,图像交替显示。在偶数运行时,图像不会交替,而是保持亮起(直到它完成)。我的代码非常相似,可以实现闪烁效果。没有意义的是,为什么is只适用于奇数调用。您的代码如何解释这一点?
using System;
using System.Drawing;
using System.Windows.Forms;

namespace Blinker
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Interval = 250;
            timer1.Tick += timer1_Tick;
            timer1.Start();
        }

        void timer1_Tick(object sender, EventArgs e)
        {
            Console.WriteLine("Tick");
            pictureBox1.BackColor = (pictureBox1.BackColor == System.Drawing.Color.Red) ? System.Drawing.Color.Black : System.Drawing.Color.Red;
        }
    }
}