跨线程操作在父控件中无效

时间:2013-05-03 14:38:31

标签: c# winforms user-interface invalidoperationexception

我使用以下代码更新我的类中的标签,该标签扩展了UserControl

private delegate void LabelChanger(bool signedIn);

public bool SignedIn
{
    get { return _signedIn; }
    set
    {
        _signedIn = value;
        labelChanger(value);
    }
}

private void labelChanger(bool signedIn)
{
    if (label1.InvokeRequired)
    {
        BeginInvoke(new LabelChanger(labelChanger), signedIn);
    }
    label1.Text = signedIn ? "Sign Out" : "Sign In";
}

问题在于,当代码设置标签文本时,UI会更新,但是我在面板上得到一个“InvalidOperationException”,它是标签的父级。有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:5)

即使您处于错误的线程中,也会执行label1.Text = signedIn ? "Sign Out" : "Sign In";。你应该用else {}包围它。