线程间操作无效: 从不是创建控件“**”的线程访问它 利用委托处理
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 });
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 });
相关文章推荐
- (委托事件处理)关于多线程执行显示进度条的实例(转)&&线程间操作无效: 从不是创建控件“rtxtEntryNO”的线程访问它。
- invoke委托解决“线程间操作无效: 从不是创建控件的线程访问它”的问题
- C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件“Form1”的线程访问它
- 用委托在listbox中异步显示信息,解决线程间操作无效,从不是创建控件的线程访问它
- 线程间操作无效:从不是创建控件 的线程访问它 使用委托
- 线程间操作无效: 从不是创建控件的线程访问它
- 线程间操作无效: 从不是创建控件"Form1"的线程访问它
- bug:C#线程间操作无效: 从不是创建控件" XX" 的线程访问它
- 教你如何解决“线程间操作无效: 从不是创建控件的线程访问它”
- 线程间操作无效: 从不是创建控件 的线程访问它
- C#---线程间操作无效: 从不是创建控件“txtreceive”的线程访问它
- 线程间操作无效,从不是创建控件的线程访问控件的解决方案
- Exception:线程间操作无效: 从不是创建控件的线程访问它 解决方案
- 线程间操作无效: 从不是创建控件“”的线程访问它
- 线程间操作无效: 从不是创建控件“listBox1”的线程访问它
- 线程间操作无效:不是从创建控件“控件名”的线程访问它
- 小结“线程间操作无效: 从不是创建控件的线程访问它” 错误的解决方法
- 线程间操作无效,从不是创建控件的线程访问它
- 线程间操作无效:从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析
- 如何解决“线程间操作无效: 从不是创建控件的线程访问它”