• WIN FORM 多线程更新UI(界面控件)


    方法1,更新单个控件:
    public delegate void ControlTextMethod(Control control, string text);
    private void SetControlText(Control control, string text)
    {
        if (this.InvokeRequired)
        {
            ControlTextMethod controlTextMethod = new ControlTextMethod(SetControlText);
            this.Invoke(controlTextMethod, new object[] { control, text });
        }
        else
        {
            control.Text = text;
        }
    }

    需要更新控件的Text的地方,直接调用SetControlText方法就可以了。

    方法2,使用“UIThread”:

    public void UIThread(MethodInvoker method)
    {
        if (this.InvokeRequired)
        {
            this.Invoke(method);
        }
        else
        {
            method.Invoke();
        }
    }

    public void UpdateUI()
    {
        this.UIThread(delegate
        {
            this.Label1.Text = "msg1";
            this.Label2.Text = "msg2";
        });
    }

    在需要更新界面的地方这么调用:this.UIThread(delegate{this.Label1.Text="msg1";...});。

    方法3,在一个方法里集中更新多个控件:

    public void UpdateUI()
    {
        if (this.InvokeRequired)
        {
            this.Invoke(new MethodInvoker(delegate { UpdateUI(); }));
        }
        else
        {
            this.Label.Text = "msg1";
            this.Labe2.Text = "msg2";
        }
    }
  • 相关阅读:
    GNOME on Arch Linux
    忽然想通不喜欢搞前端的原因
    可以一时气馁,不能放弃
    Hack语言类型化简介
    标榜
    Hack其实是一门好语言
    Focus
    PHP旧系统基于命名空间重构经验
    少即是多的设计
    IDDD 实现领域驱动设计-一个简单的 CQRS 示例
  • 原文地址:https://www.cnblogs.com/anjou/p/2673103.html
Copyright © 2020-2023  润新知