如何在固定时间内更改按钮的backColor?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (42)

当某个值来自串口时BackColor,我希望在Button固定时间内更改a 。我在Timer这里设置对象:

public formLabel()
{
    InitializeComponent();
    // ...
    timerColor.Tick += timerColor_Tick;
    timerColor.Interval = 3000;
}

然后,当我从串口接收信号时:

private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
    SerialPort sp = (SerialPort)sender;
    string indata = sp.ReadExisting();
    MessageBox.Show("Dati Ricevuti: " + indata);
    if (indata.CompareTo("K") == 0)
    {
        timerColor.Enabled = true;
        btnEsito.BackColor = Color.Green;
        btnEsito.Text = "GOOD";
        // Do something
    }
    if (indata.CompareTo("O") == 0)
    {
        timerColor.Enabled = true;
        btnEsito.BackColor = Color.Red;
        btnEsito.Text = "NO GOOD";
    }
}

这是停止计时器的方法:

private void timerColor_Tick(object sender, EventArgs e)
{
    MessageBox.Show("HERE!");
    timerColor.Enabled = false;
    btnEsito.BackColor = Color.White;
}

BackColorbtnEsito基础上,我收到信号的类型变为绿色或红色,但程序不显示消息"HERE!",按钮不回来白色。

谁能帮助我?

提问于
用户回答回答于

System.Windows.Forms.Timer专为单线程使用而设计,需要在UI线程上启动和停止。您正尝试在单独的线程上启动计时器,因此您需要确保修改计时器Enabled属性在UI线程上完成。您可以通过创建委托方法并从事件处理程序调用它来实现此目的 - 可能是这样的:

delegate void TimerDelegate(bool Enable);
private void ControlTimer(bool Enable)
{
  timerColor.Enabled = Enable;
}

private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
    SerialPort sp = (SerialPort)sender;
    string indata = sp.ReadExisting();
    MessageBox.Show("Dati Ricevuti: " + indata);
    if (indata.CompareTo("K") == 0)
    {
        Invoke((TimerDelegate)ControlTimer, true);
        btnEsito.BackColor = Color.Green;
        btnEsito.Text = "GOOD";
        // Do something
    }
    if (indata.CompareTo("O") == 0)
    {
        Invoke((TimerDelegate)ControlTimer, true);
        btnEsito.BackColor = Color.Red;
        btnEsito.Text = "NO GOOD";
    }
}

private void timerColor_Tick(object sender, EventArgs e)
{
    MessageBox.Show("HERE!");
    Invoke((TimerDelegate)ControlTimer, false);
    btnEsito.BackColor = Color.White;
}

所属标签

可能回答问题的人

  • 女淘日记

    杭州吱吱吱科技 · 站长 (已认证)

    1 粉丝1 提问3 回答
  • 朝夕熊博客

    1 粉丝2 提问3 回答
  • 找虫虫

    6 粉丝0 提问2 回答
  • 无聊至极

    6 粉丝504 提问2 回答

扫码关注云+社区

领取腾讯云代金券