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

有一个窗体一个类点击窗体的按钮调用类里面的一个方法。类的方法要能修改窗体的label控件的text值100分求助在线等。委托啥的我都找过希望能有个高手给搞个demo出来到... 有一个窗体 一个类 点击窗体的按钮 调用 类里面的一个 方法。 类的方法要能修改 窗体的 label控件的text 值 100 分求助 在线等。 委托啥的 我都 找过 希望能有个 高手 给搞个 demo 出来到附件上。谢谢。 展开
 我来答
亚马逊选品管家
2013-09-24 · TA获得超过643个赞
知道小有建树答主
回答量:805
采纳率:100%
帮助的人:283万
展开全部

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

            

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;
    }
}


xy404750389
2013-09-24 · TA获得超过505个赞
知道小有建树答主
回答量:303
采纳率:0%
帮助的人:148万
展开全部
使用代理 看我代码
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");
追问
线程的方法 需要是静态引用  - -
追答
试试吧  不就是多线程么?跨线程更改主线程控件属性,还什么静态引用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
板凳瓜子准备好了
2013-09-24 · TA获得超过163个赞
知道小有建树答主
回答量:278
采纳率:0%
帮助的人:129万
展开全部
/// <summary>
/// 跨线程设置当前测试项
/// </summary>
private void ThreadSetTestingInfo()
{
MethodInvoker In = new MethodInvoker(SetTestingInfo);
this.BeginInvoke(In);
}
/// <summary>
/// 设置当前测试详情
/// </summary>
private void SetTestingInfo()
{
string XX=通过类获取值
this.Text.Text = XX;

}

调用的时候,调用上面的方法,这其实就是个委托
追问
线程 方法 需要的是 静态调用 不能 实例化。窗体的构造方法有很多初始化代码 。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式