在编辑一个控件的时候,报控件不在该线程的控制
解决方案 »
- 一个小计算取值问题(在线求教)
- 发送邮件时添加图片路径的问题
- 求高手解答!!在pictureBox加载了图片后,如何释放他,才能使用 File.Delete()来删除它加载的图片文件
- 控件的最大化
- 删除数据库符合时间记录
- 一个排序,用代码实现
- webservices里如果只让构造函数中的代码只在初次调用时执行,该怎么写
- 我编程生成的xls文件里面的数字变成文本,怎么才能变成数字啊?这样在一打开Excel时,就可以对里面的数字求和等。
- 数据解析及事件触发
- 使用API GetClassName遇到麻烦,请高手指点一下(在线等待)
- 创建用户控件,怎么将其中的某一控件设为容器,且调用时添加控件不用挡住。
- 关于AJAX的ModalPopupExtender里有3个按钮
1,把要调用的控件 访问权限为public;
2,在你的那个线程类中定义一个字段 public Form1 form1;
3,在你Form1 f=new Form1(); 的地方顺便将窗体对象传递到线程的那个类(假如那个类叫ThreadClass)
ThreadClass threadClass=new ThreadClass();
threadClass.form1=f;
4,在ThreadClass这个类定义个委托,委托方法中用control.invoke访问。
//跨线程访问UI控件的委托
public delegate void InvokeDelegate(); //不带参数
//带参数
public delegate void InvokeDelegateParameter(string address, string port); this.frmgps.listBox1.Invoke(new InvokeDelegate(DisplayStart)); private void DisplayStart()//委托方法
{
this.frmgps.listBox1.Items.Add(DateTime.Now.ToLongTimeString() + " 开始监听 终端4 " + this.port.ToString() + " 端口数据...");
this.frmgps.listBox1.SetSelected(this.frmgps.listBox1.Items.Count - 1, true);
}
http://topic.csdn.net/u/20090722/10/f5374d22-554e-41b9-81c1-d5645e1bc909.html?89227
那是因为.net1.1可以不需要跨线程。。
2.0以后的就要用Control.Invoke()访问。
为了兼容1.1在编译阶段是允许的,,运行的时候就会出错
希望对楼主有所启发
delegate void SetTextCallback(string text);
private void SetText(string text)
{
if (this.inforMg.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.inforMg.Text = text;
}
}
或者
设置属性FrmBasic .CheckForIllegalCrossThreadCalls = false;