2013-05-03 41 views
0

我使用下面的代码来更新我的课延伸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。任何想法为什么?谢谢。

+0

看看这个InvalidOperationException的InnerException和堆栈跟踪。 – JeffRSon 2013-05-03 14:40:51

回答

5

即使您在错误的线程中,label1.Text = signedIn ? "Sign Out" : "Sign In";也会执行。你应该附上一个else {}

+0

我不敢相信我没有看到..谢谢! – 2013-05-03 14:42:13