zoukankan      html  css  js  c++  java
  • C# 关于跨线程访问控件问题

    跨线程访问控件问题的原因是:控件都是在主线程中创建的,而系统默认控件的修改权归其创建线程所有。在子线程中如果需要直接修改控件的内容,需要使用委托机制将控件的修改操作交给主线程处理。因此,当没有使用委托机制而是直接在子线程中修改控件内容时,会引发控件安全问题,即跨线程访问控件问题。

    所谓跨线程调用控件就是一个线程调用另外一个线程的控件。

    常见使用情况,比如:当我们开了一个在后台监听消息的线程以后,需要将消息内容添加到主窗体的消息框内显示出来。

    这时候,我们就需要使用跨线程调用控件的方法。

    1.首先,声明一个委托,如:
    //修饰符 delegate 返回类型 委托函数名(有参/无参);
    public delegate void AddInfo_Delgegate(string message);
    2.创建委托函数对象,如:

    //添加消息到指定控件的函数
    private void AddInfo(string message)
    {
    this.richTextBox_Message.Text += message;
    this.richTextBox_Message.Text += " ";//换行
    }

    AddInfo_Delegate addinfo = new AddInfo_Delegate(AddInfo);

    3.在需要跨线程调用空间的地方,使用invoke方法:


    this.richTextBox_Message.Invoke(addinfoDelegate, DELEGATEMESSAGE);
    //this.richTextBox_Message 是需要添加消息的控件
    //invoke() 正如官方解释所说,在拥有此控件的线程上,调用指定参数列表执行委托。
    //invoke() 有两种参数模式,一是invoke(委托函数对象),二是带参类型invoke(委托函数对象,参数)
    ---------------------
    作者:linyujie0927
    来源:CSDN
    原文:https://blog.csdn.net/linyujie0927/article/details/72083227
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    vi 批量加注释与替换
    linux常用快捷键
    kubectl常用命令
    软件管理方法
    zabbix3.2升级3.4报错Database error
    zabbix显示中文乱码
    主从复制延迟及原因
    Python-- 文件与操作系统
    层次聚类
    盲源分离
  • 原文地址:https://www.cnblogs.com/asdyzh/p/9876818.html
Copyright © 2011-2022 走看看