【问题标题】:Cross-thread operation not valid in parent control跨线程操作在父控件中无效
【发布时间】:2013-05-03 14:38:30
【问题描述】:

我正在使用以下代码来更新我的班级中扩展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。任何想法为什么?谢谢。

【问题讨论】:

  • 查看 InnerException 和 InvalidOperationException 的堆栈跟踪。

标签: c# winforms user-interface invalidoperationexception


【解决方案1】:

即使您在错误的线程中,label1.Text = signedIn ? "Sign Out" : "Sign In"; 也会被执行。你应该用else {}括起来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多