C# this.Invoke()的作用与用法、不阻塞UI界面线程的延时函数

2023-11-04

一、this.Invoke()的作用与用法、不阻塞UI界面线程的延时函数

Invoke()的作用是:在应用程序的主线程上执行指定的委托。一般应用:在辅助线程中修改UI线程( 主线程 )中对象的属性时,调用this.Invoke();

在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误 的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界面显示。

正确的做法是将工作线程中涉及更新界面的代码封装为一个方 法,通过 Invoke 或者 BeginInvoke 去调用,两 者的区别就是一个导致工作线程等待,而另外一个则不会。

//用法1:无参数,无返回值
Action action = () =>
  {
                          
      //刷新UI界面控件数据                      
  };
  this.Invoke(action);


//用法2:2个参数,无返回值
 void ShowColor(string filePath, List<string> colorPicFileName)
{

}
 Action<string, List<string>> action = ShowColor;
 this.Invoke(action, _colorFilePath, colorPicFileNames);

//用法3:无参数,无返回值,直接实例化
void ShowInputPanel()
{

}
this.Invoke(new Action(ShowInputPanel));

//用法4:无参数,无返回值
//lambda表达式(不需要定义函数名,直接执行函数体, =>左边()内也可以输入参数, =>右边输入函数体)
this.Invoke(new Action(() => _previewControl.ShowE(_currentDirection, value)));

//不阻塞UI界面线程的延时函数
    public static void DelayMs(int milliSecond)
    {
         int start = Environment.TickCount;
         while (Math.Abs(Environment.TickCount - start) < milliSecond)
         {
             Application.DoEvents();
         }
    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# this.Invoke()的作用与用法、不阻塞UI界面线程的延时函数 的相关文章

随机推荐

  • Python3 报错TypeError: string indices must be integers

    python sort 方法排序 遇到了报错 TypeError string indices must be integers 代码如下图 1 这个错误的意思是 字符串下标必须要是整数 2 当然还有另外一种情况 就是通过字典去取字段 例
  • 秋招-算法-查分与前缀和数组篇

    秋招 算法 查分与前缀和数组篇 差分数组 差分数组的主要适用场景是频繁对原始数组的某个区间的元素进行增减 1109 航班预订统计 class Solution public int corpFlightBookings int bookin
  • 为什么我选择了springcloud而不是dubbo?

    写好的代码越来越满足不了需求 因为需求总是在不断的变化 在技术选型时 实在是心有余而力不足 思来想去 就考虑了使用微服务架构来实现 功能模块化 今天主要讲讲为什么需要微服务架构 还是以故事的形式呈现 一 认识微服务 阶段一 单体服务 话说小
  • 重新理解百度智能云:写在大模型开放后的24小时

    在这些回答背后共同折射出的一个现实是 大模型不再是一个单选题 而更是一个综合题 在这个新的时代帆船上 产品 服务 安全 开放等全部都需要成为必需品 甚至是从企业的落地层面来看 这些更是刚需品 作者 皮爷 出品 产业家 过去的5个月 李亮很忙
  • 哇,ElasticSearch多字段权重排序居然可以这么玩

    背景 读者提问 ES 的权重排序有没有示列 参考参考 刚好之前也稍微接触过 于是写了这篇文章 可以简单参考下 在很多复杂的业务场景下 排序的规则会比较复杂 单一的降序 升序无法满足日常需求 不过 ES 中提供了给文档加权重的方式来排序 还是
  • python中的tkinter包的使用-Label & Button

    首先我们先建一个简单的窗口 代码 import tkinter as tk window tk Tk window title my window window geometry 200x100 窗口尺寸 l tk Label window
  • 算法—打印回形数

    题目 题目描述 回形数是一个矩阵输出 从矩阵的左上角往右开始打印数字0 遇到矩阵边界时 顺时针90方向继续打印 并数字增长1 如此类推直到把矩阵填满 输入一个整形宽和高单位 每输出一个数字 占用1单位宽高空间 根据入参打印出对应的回形数 输
  • 【Linux】root和子用户都能执行的命令,sudo无法执行(已解决)

    全流程帖子 https ask oceanbase com t topic 35604437 7 1 问题 如题 在编译miniob的时候遇到如下错误 mu vm cnt8 code miniob sudo bash build sh in
  • 华为OD机试 - 座位调整(Python)

    题目描述 疫情期间课堂的座位进行了特殊的调整 不能出现两个同学紧挨着 必须隔至少一个空位 给你一个整数数组 desk 表示当前座位的占座情况 由若干 0 和 1 组成 其中 0 表示没有占位 1 表示占位 在不改变原有座位秩序情况下 还能安
  • 如何申请@MSN.Com后缀的邮箱?

    最近辞职在家无事 想申请个 MSN Com后缀的信箱 在网上搜索了一下 原来只要从下面的地址进入注册即可 注册抵制 https accountservices passport net reg srf ns msn com sl 1 lc
  • Pytorch深度学习(六):Softmax函数实现多分类

    Pytorch深度学习 六 Softmax函数实现多分类 参考B站课程 PyTorch深度学习实践 完结合集 传送门 PyTorch深度学习实践 完结合集 一 预备知识 多分类 与之前的二分类不同 这个例子要识别手写数字的多分类 需要求出各
  • surface go 快乐装Ubuntu

    咳咳 首先我只是想体验一下 surface go 装Ubuntu 滑稽 每次开机看到田字格 然后显示出Ubuntu 有一种莫名的喜感 安装前准备 一个u盘 至少能装下你的映像文件 一台笔记本 拿来看博客 百度 你的surface go 我拿
  • (2)Mysql的安装及配置

    一 下载mysql 安装mysql有两种方式 一种是下载安装包安装 另一种是下载压缩包解压配置 这里使用安装包方式 进去后点击下面的Download 点击No thinks进入下载 二 安装mysql 双击下载好的安装包 选择Server
  • IntelliJ IDEA+SpringBoot+Tomcat部署404问题

    因为并行开发 后端一直拿不出接口 我不得不自己做Mock 为了完成网络请求逻辑 我使用Idea做模拟接口 后来发现 使用Idea创建的SpringBoot项目在软件内部的虚拟Tomcat上面可以正常运行 但是因为要做一些WebSocket和
  • 苹果笔记本计算机管理员删除,如何删除一个管理员?

    注销要删除的管理员帐户 再以管理员帐户登入 然后跟下面方法 如果您是管理员 则可以删除您不再想让其可访问电脑的用户 删除用户时 您可以存储该用户的个人文件夹 包含用户的文件和设置 或删除该个人文件夹 选取苹果菜单 gt 系统偏好设置 然后点
  • Python反反爬之JS混淆---动态Cookie(持续更新详细教程)

    写在前面 第一题JS混淆 源码乱码 经过上一题的练习JS混淆 源码乱码 我们已经对JS混淆有了大致的了解 这次我们再来练习一道同类型的题目 只不过这次是动态Cookie 首先 让我们了解一下什么是Cookie Cookie 并不是它的原意
  • lua中的常用字符串处理方法

    对lua中string类库中常用方法总结一二 1 数字和字符串相加减lua自动转换 2 得到字符串的长度 3 string byte 返回字符的内部数字编码 ASCII码 4 string char 返回和参数数量相同长度的字符串 其中每个
  • LeetCode202.快乐数(Python)

    题目 解题思路 运用哈希表 将各个位数进行平方 将得到的数进行判断 如果为1输出True 如果不为1 判断是否重复了 如果重复输出False 如果没有重复 进行各个位数平方 反复以上操作 class Solution def isHappy
  • [转]Smartgit :Remove Discard Delete

    Smartgit Remove Discard Delete https blog csdn net u010272085 article details 85039801 Remove 从仓库中移除选中的文件或目录 可通过Discard还
  • C# this.Invoke()的作用与用法、不阻塞UI界面线程的延时函数

    一 this Invoke 的作用与用法 不阻塞UI界面线程的延时函数 Invoke 的作用是 在应用程序的主线程上执行指定的委托 一般应用 在辅助线程中修改UI线程 主线程 中对象的属性时 调用this Invoke 在多线程编程中 我们