gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:41:23 28 4
gpt4 key购买 nike

当某个值来自串行端口时,我想在固定时间内更改 ButtonBackColor。我在这里设置了 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;
}
btnEsito

BackColor 根据我收到的信号类型变为绿色或红色,但程序不显示消息 “HERE!”,按钮不会返回白色。

谁能帮帮我?

最佳答案

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

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;
}

关于c# - 如何在固定时间内更改按钮的 backColor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52079525/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com