c#中Invoke方法

c#中Invoke方法invoke方法的初衷是为了解决在某个非某个控件创建的线程中刷新该控件可能会引发异常的问题。说的可能比较拗口,举个例子:主线程中存在一个文本控件,在一个子线程中要改变该文本的值,此时会有可能引发异常。为了避免该问题,需要在子线程中使用invoke方法来封装刷新文本内容的函数。Invoke或者BeginInvoke去调用,两者的区别就是Invoke会导致工作线程等待,而BeginIn

大家好,又见面了,我是你们的朋友全栈君。

invoke方法的初衷是为了解决在某个非某个控件创建的线程中刷新该控件可能会引发异常的问题。说的可能比较拗口,举个例子:主线程中存在一个文本控件,在一个子线程中要改变该文本的值,此时会有可能引发异常。

为了避免该问题,需要在子线程中使用invoke方法来封装刷新文本内容的函数。Invoke 或者 BeginInvoke 去调用,两者的区别就是Invoke 会导致工作线程等待,而BeginInvoke 则不会

using System.Threading;

       public delegate void MyInvoke(string str);//invoke方法创建委托
        private void btnStartThread_Click(object sender, EventArgs e)
        {

            Thread thread = new Thread(new ThreadStart(DoWord));
            thread.Start();
        }
        public void DoWord()
        {            
            MyInvoke mi = new MyInvoke(SetTxt);//实例化一个委托,并且指定委托方法
            BeginInvoke(mi,new object[]{“abc”}); //调用invoke方法           
        }

        public void SetTxt(string str)//委托对应的方法
        {

            txtReceive.Text += “invoke”;
        }

this.listView1.Invoke(new EventHandler(delegate
 {

          listView1.Items.RemoveAt(i);
  }));

或者

Invoke(new Action(()=>{

todo();

}));

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131179.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基于SSM实现的旅游管理系统【附源码】(毕设)[通俗易懂]

    基于SSM实现的旅游管理系统【附源码】(毕设)[通俗易懂]一、项目简介本项目是一套基于SSM实现的旅游管理系统或旅游网站或旅游社交平台或旅游景点管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。详细介绍了该系统的具体实现,包括:项目介绍环境搭建系统功能技术实现项目运行功能演示以通俗易懂的方式,手把手的带你从零开始部署并运行本套系统,该项目附带全部源码可作为毕设使用。项目都经过严格调试,确保可以运行!课程包含:项目源码、项目文档、数据库脚本、软件工具等所有资料带你从零开始部署运行本套系统

    2022年5月6日
    208
  • porm.xml-ssh[通俗易懂]

    porm.xml-ssh[通俗易懂]基于Maven的ssh2整合,Struts2.3.24+Spring4.2.4+Hibernate5.0.7完整文件<projectxmlns=”http://maven.apache.org/POM/4.0.0″xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”xsi:schemaLocatio…

    2022年6月15日
    25
  • IsBackground_background和background-color

    IsBackground_background和background-color1、当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为FALSE的。2、当主线程退出的时候,IsBackground=FALSE的线程还会继续执行下去,直到线程执行结束。3、只有IsBackground=TRUE的线程才会随着主线程的退出而退出。4、当初始化一个线程,把Thread.IsBackground=true的时候,指示该线程为后台线程。后台…

    2022年10月17日
    1
  • 《数据库系统概论》第五版 +学习笔记总目录

    《数据库系统概论》第五版 +学习笔记总目录文章目录前言第1章绪论第2章关系数据库第3章关系数据库标准语言SQL第4章数据库安全性第5章数据库完整性第6章关系数据理论前言本篇文章学习书籍:《数据库系统概论》第5版王珊萨师煊编著学习软件:NavicatPremium15&&SSMS采用数据库:SQLSever说明:虽然数据库是SQLSever有些书上的语句执行不了,貌似书采用的是Oracle数据库的SQL,不过没关系,初学我们最重要的是掌握其思想,很多思想和方法语句在

    2022年8月20日
    5
  • 基于 mysql时序_时序数据库简介

    基于 mysql时序_时序数据库简介时间序列数据库简称时序数据库(TimeSeriesDatabase),用于处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。时序数据的几个特点1.基本上都是插入,没有更新的需求。2.数据基本上都有时间属性,随着时间的推移不断产生新的数据。3.数据量大,每秒钟需要写入成千万上亿条数据业务方常见需求1.获取最新状态,查询最近的数据(例如传感器最新…

    2022年10月4日
    1
  • docker 启动容器出现 Exited[通俗易懂]

    有时候在启动容器的时候,启动没报错,但是在执行dockerps-a时发现刚启动的容器状态为Exited(1),这个时候查看日志dockerlogs-f-t–tail20容器ID,发现报chown:changingownershipof’.’:Permissiondenied提示没有权限,这个时候将容器删除,在执行容器启动的命令中加入–privi…

    2022年4月17日
    1.3K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号