注册 登录
编程论坛 C# 论坛

用委托设置Lable的颜色出了问题

motor666 发布于 2017-04-17 14:15, 2102 次点击
我的项目里需要根据串口接收到的不同的数据来改变一个 Lable 的显示颜色,蓝色和绿色,于是做了一个下面的委托:
        delegate void SetLableCoLor(Label LB, Color Colorkind);
        public static void SetLableForeColor(Label LB, Color Colorkind)
        {
            if (LB.InvokeRequired)
            {
                SetLableCoLor SLC = SetLableForeColor;
                SLC.Invoke(LB, Colorkind);
            }
            else
            {
                if (Colorkind == Color.Blue)
                {
                    LB.ForeColor = Color.Blue;
                }
                else if (Colorkind == Color.Green)
                {
                    LB.ForeColor = Color.Green;
                }
             }
        }

      做一个按钮进行测试:
private void button1_Click(object sender, EventArgs e)
{
   SetLableString SLS = new SetLableString(LableDisplyString);
   SLS.Invoke(label1, "设置标签颜色为蓝色");
   SetLableCoLor SETCL = new SetLableCoLor(SetLableForeColor);
   SETCL.Invoke(label1,Color.Blue);

}

结果正确,可以改变颜色,但是,把这段程序放到串口接收到数据时,改变标签颜色就出错。显示:
"System.StackOverflowException"类型的未处理异常,在 System.Windows.Forms.dll 中发生

2 回复
#2
yhlvht2017-04-17 21:15
这个是自己调自己的无限循环
如果SetLableForeColor是通过外面Invoke方式调用,也就是说SetLableForeColor方法本身就是通过委托来执行的,里面就不需要再判断和调用了。
public static void SetLableForeColor(Label LB, Color Colorkind)
{
    if (Colorkind == Color.Blue)
    {
        LB.ForeColor = Color.Blue;
    }
    else if (Colorkind == Color.Green)
    {
        LB.ForeColor = Color.Green;
    }
}
#3
motor6662017-04-18 11:30
多谢了。
1