• 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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    再提一个建议,不过就要辛苦dudu了
    项目中的小项目实现在望
    Visual Studio.Net 技术Tip
    IQueryable与foreach的困惑?
    [转贴]浅析大型网站的架构
    [原创]WCF入门级使用教程(转载请注明出处)
    [原创]在msmq3.0中使用http协议发送消息
    [转贴][WCF Security] 4. 用户名/密码身份验证
    [转贴][WCF Security] 1. 基本概念
    [转]在SQL Server2005中进行错误捕捉
  • 原文地址:https://www.cnblogs.com/asdyzh/p/9876818.html
Copyright © 2020-2023  润新知