zoukankan      html  css  js  c++  java
  • C#跨线程更改用户界面

    这里举一个更改Text属性的例子:

    1.为了实现更改任意一个控件,这里我定义了一个结构体

    public struct SetTextParam
    {
       public Control CtrlObject;
       public string strText;
    }

    2.定义一个委托

    delegate void SetTextCallback(SetTextParam stParam);

    3.编写改变Text属性的函数

    private void SetText(SetTextParam stParam)
    {
        if (stParam.CtrlObject.InvokeRequired)
            stParam.CtrlObject.Invoke(new SetTextCallback(SetText), new object[] { stParam });
        else
            stParam.CtrlObject.Text = stParam.strText;
    }

    重载一个,我更喜欢这样的方式:

    private void SetText(Control CtrlObject,string strText)
    {
        if (CtrlObject.InvokeRequired)
        {
            SetTextParam stParam;
            stParam.CtrlObject = CtrlObject;
            stParam.strText = strText;
            CtrlObject.Invoke(new SetTextCallback(SetText), new object[] { stParam });
        }
        else
            CtrlObject.Text = strText;
    }

    4.创建线程函数

    private void ThreadProcSafe(object objParam)
    {
        SetText((SetTextParam)objParam);
    }

    5.现在可以在别的线程里面改变Control的界面了,如在button1_click中添加如下代码:

    SetTextParam stParam;
    stParam.CtrlObject = button1;
    stParam.strText = "New Button";
    Thread newThread = new Thread(new ParameterizedThreadStart(ThreadProcSafe));
    newThread.Priority = ThreadPriority.AboveNormal;
    newThread.Start(stParam);

  • 相关阅读:
    使用Vim写LaTeX代码(Vim+Vimtex+Skim)
    如何安装vim自动补全插件YouCompleteMe(YCM)
    我的vimrc配置
    囚徒问题(100 prisoners problem)的python验证
    tomcat下运行多个项目
    转使用chrome命令行:disable-web-security 实现浏览器跨域
    Spring Session
    nodejs 之 nvm和pm2
    chrome地址栏命令
    Koa2和相关资料
  • 原文地址:https://www.cnblogs.com/wangchuang/p/2918161.html
Copyright © 2011-2022 走看看