永发信息网

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

答案:3  悬赏:60  手机版
解决时间 2021-01-05 20:18
  • 提问者网友:我们很暧昧
  • 2021-01-05 08:15
c# 跨线程 跨类改变控件text值
最佳答案
  • 五星知识达人网友:西风乍起
  • 2021-01-05 09:19
不能直接跨线程访问控件的,需要用到委托,用如下方法就可以了,另外给你一个类,里面封装了一些常用方法可以使用。
            
delegate void SetTextDelegate(Control Ctrl, string Text);
/// 
/// 跨线程设置控件Text
/// 

/// 待设置的控件
/// Text
public static void SetText(Control Ctrl, string Text)
{
    if (Ctrl.InvokeRequired == true)
    {
        Ctrl.Invoke(new SetTextDelegate(SetText), Ctrl, Text);
    }
    else
    {
        Ctrl.Text = Text;
    }
}



全部回答
  • 1楼网友:怀裏藏嬌
  • 2021-01-05 12:01
///
/// 跨线程设置当前测试项
///

private void ThreadSetTestingInfo()
{
MethodInvoker In = new MethodInvoker(SetTestingInfo);
this.BeginInvoke(In);
}
///
/// 设置当前测试详情
///

private void SetTestingInfo()
{
string XX=通过类获取值
this.Text.Text = XX;
}
调用的时候,调用上面的方法,这其实就是个委托追问线程 方法 需要的是 静态调用 不能 实例化。窗体的构造方法有很多初始化代码 。
  • 2楼网友:独钓一江月
  • 2021-01-05 10:23
使用代理 看我代码
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");追问线程的方法 需要是静态引用 - -追答试试吧 不就是多线程么?跨线程更改主线程控件属性,还什么静态引用
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯