首页 > 编程语言 >C#一行代码之跨线程更新控件1

C#一行代码之跨线程更新控件1

时间:2023-05-06 16:12:12浏览次数:50  
标签:control 控件 C# 代码 textBox1 ExInvokeIt 线程 textBox

代码使用

ThreadPool.QueueUserWorkItem(o =>
{
    for (int i = 0; i < 100; i++)
    {
        textBox1.ExInvokeIt(textBox => textBox.Text = i.ToString());
    }
});
//或
Task.Run(() =>
{
    for (int i = 0; i < 100; i++)
    {
        textBox1.ExInvokeIt(textBox => textBox.Text = i.ToString());
    }
});

 

代码封装

/// <summary>
/// 跨线程访问控件,调用示例:textBox1.ExInvokeIt(it => it.Text = message);  
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="control"></param>
/// <param name="action"></param>
public static void ExInvokeIt<T>(this T control, Action<T> action) where T : Control
{
    if (control.InvokeRequired)
        control.Invoke(action, control);
    else
        action(control);
}

如果代码中的This不去掉,则为拓展方法,必须申明在静态类中且为静态方法,如果要和通用类一样则可以去掉This关键字

标签:control,控件,C#,代码,textBox1,ExInvokeIt,线程,textBox
From: https://www.cnblogs.com/HomeSapiens/p/17377668.html

相关文章

  • Mac M系列芯片 vue前端node-sass兼容问题解决
    0、由于M系列芯片是arm架构,在使用brew安装node时都是arm的node,但是[email protected]版本中不支持arm架构的出现如下报错:Error:NodeSassdoesnotyetsupportyourcurrentenvironment:OSXUnsupportedarchitecture(arm64)withUnsupportedruntime(88)Formoreinfor......
  • 使用Swagger Codegen生成TS相关代码
    官方介绍地址:https://github.com/swagger-api/swagger-codegen1.安装JDK【略】2.下载jar包wgethttps://repo1.maven.org/maven2/io/swagger/codegen/v3/swagger-codegen-cli/3.0.41/swagger-codegen-cli-3.0.41.jar-Oswagger-codegen-cli.jar或Invoke-WebRequest-OutFil......
  • Spring MVC 单元测试
    关键字:SpringMVC单元测试下面一步一步带领大家实现springMVC单元测试:新建一个基类:packagetest;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.junit.BeforeClass;importo......
  • Hashtable、synchronizedMap、ConcurrentHashMap 深度比较
    关键字:Hashtable、synchronizedMap、ConcurrentHashMap深度比较util.concurrent包除了包含许多其他有用的并发构造块之外,还包含了一些主要集合类型List和Map的高性能的、线程安全的实现。BrianGoetz向您展示了用ConcurrentHashMap替换Hashtable或synchro......
  • Tomcat6.0配置JNDI数据源完整例子(5.5与此配置相同)
    关键字:Tomcat6.0配置JNDI数据源注意事项:tomcatJDK一定要和应用程序的JDK版本一致(本例中统一JDK1.6)说明:tomcat5.5与6.0的配置略有不同,即:tomcat的lib位置不同(其他完全一致),6.0位置是:D:\我的工具\apache-tomcat-6.0.10\lib下5.5位置是:D:\我的工具\apa......
  • spring3.0 mvc和rest入门例子
    关键字:spring3.0mvc和rest入门例子现在写个简单的小例子出来给初学者学习下。srping3也支持rest,所以例子也包括这部分内容。先看web.xml配置<!--像js,css,gif等静态文件,需要配置为默认的servlet--><servlet-mapping><servlet-name>defaul......
  • oracle大数据量优化
    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及orderby涉及的列上建立索引。2.应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:selectidfromtwherenumisnull可以在num上设置默认值0,......
  • spring3.0 mvc rest 注解之@
    关键字:springmvcrest注解之@@RequestMapping@RequestParam@PathVariable@ModelAttributes@SessionAttributes@CookieValue@RequestHeader都是SpringMVCREST中的注释方法,这几种注释方法的用法如下:1#Controller示例URL示例:POST/users/quer......
  • Oracle分区详解
    关键字:Oracle分区详解概要说明:对分区后的表进行操作和原来一样(无需任何改动)并且可以根据分区进行查询(非必须),如:select*frombpmpartition(part_b)wherepid<=18;其中part_b是bpm表中的一个分区名称。该文章通过以下五方面来整理关于分区表的概念......
  • spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)
    关键字:spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)应用场景:很多时候我们想要在某个类加载完毕时干某件事情,但是使用了spring管理对象,我们这个类引用了其他类(可能是更复杂的关联),所以当我们去使用这个类做事情时发现包空指针错误,这是因为我们......