您的位置:首页 > 其它

线程间操作无效: 从不是创建控件“**”的线程访问它 利用委托处理

2010-05-04 10:40 441 查看
System.Threading.Thread th;

public delegate void SetValueEventHandler(Label label, string text);

private void btnUpdate_Click(object sender, EventArgs e)
{

th = new System.Threading.Thread(new System.Threading.ThreadStart(do1));
th.Start();
}

private void SetValueEvent(Label label, string text)
{
label.Text = text;
}

public void do1()
{
SetValueEventHandler setValue = new SetValueEventHandler( SetValueEvent );

for( int i =0; i < 100000; i++ )
{
Invoke(setValue,new object[]{label1,i.ToString()} );
}
}

还有一种更简单的就是在线程开始前

Control.CheckForIllegalCrossThreadCalls = false;

委托就可以完全不要了

/// <summary>
/// 利用委托处理
/// </summary>
/// <param name="btn"></param>
/// <param name="b"></param>
private delegate void SetValueEventHandler(Button btn, bool b);
private void SetValuesEvent(Button btn,bool b)
{
btn.Enabled = b;
}

下面是线程启动时加入的

//this.btnLoginOk.Enabled = true;
SetValueEventHandler setValue = new SetValueEventHandler(SetValuesEvent);
Invoke(setValue, new object[] {this.btnLoginOk,true });
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐