c# 跨线程 跨类改变控件text值

有一个窗体 一个类 点击窗体的按钮 调用 类里面的一个 方法。 类的方法要能修改 窗体的 label控件的text 值 100 分求助 在线等。 委托啥的 我都 找过 希望能有个 高手 给搞个 demo 出来到附件上。谢谢。

不能直接跨线程访问控件的,需要用到委托,用如下方法就可以了,另外给你一个类,里面封装了一些常用方法可以使用。

            

delegate void SetTextDelegate(Control Ctrl, string Text);
/// <summary>
/// 跨线程设置控件Text
/// </summary>
/// <param name="Ctrl">待设置的控件</param>
/// <param name="Text">Text</param>
public static void SetText(Control Ctrl, string Text)
{
    if (Ctrl.InvokeRequired == true)
    {
        Ctrl.Invoke(new SetTextDelegate(SetText), Ctrl, Text);
    }
    else
    {
        Ctrl.Text = Text;
    }
}


温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-24
使用代理 看我代码
private delegate void deleTestlbl(System.Windows.Forms.TextBox d, string txt);

void lblDload(System.Windows.Forms.TextBox d, string txt)
{
if (!d.InvokeRequired)
{
d.Text = txt; // 主线程调用时,直接赋值
}
else
{
// 多线程调用时,通过主线程去访问
deleTestlbl de = lblDload;
this.Invoke(de, d, txt);
}

}

加入这两个方法,如果我要textbox1显示hello 直接调用方法lblDload(textbox,"hello");追问

线程的方法 需要是静态引用 - -

追答

试试吧 不就是多线程么?跨线程更改主线程控件属性,还什么静态引用

第2个回答  2013-09-24
/// <summary>
/// 跨线程设置当前测试项
/// </summary>
private void ThreadSetTestingInfo()
{
MethodInvoker In = new MethodInvoker(SetTestingInfo);
this.BeginInvoke(In);
}
/// <summary>
/// 设置当前测试详情
/// </summary>
private void SetTestingInfo()
{
string XX=通过类获取值
this.Text.Text = XX;

}

调用的时候,调用上面的方法,这其实就是个委托追问

线程 方法 需要的是 静态调用 不能 实例化。窗体的构造方法有很多初始化代码 。

相似回答