转:https://www.cnblogs.com/muyoucai/p/6257213.html

Control类提供了一个Invoke方法来给子线程访问主线程的控件,它的原型是酱紫的:

object.Control.Invoke(Delegate method);

object.Control.Invoke(Delegate method,params object[] args);

method是已创建的委托对象,如果该对象的关联方法有参数,那就放在数组args中,没有就不用传

Invoke食用方法如下(假设我访问控件的方法是getForms()):

public delegate void getFormsDelegate(getForms的参数声明);//声明一个与所调用的用来访问控件的方法匹配的委托类型,参数必须一致

public void myThread()

{

  //线程通过getFormsDelegate()的委托,间接执行访问控件的方法getForms()
  Invoke(new getFormsDelegate(getForms),new object[] {getForms的参数列表}); }

来一个完整的例子:

这是使线程将学生信息输出到ListBox控件的例子

namespace ThreadVisitingControl
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void showStuIfo(string no, string name, double score) //本例中的线程要通过这个方法来访问主线程中的控件
{
listBox1.Items.Add("学号:" + no);
listBox1.Items.Add("姓名:" + name);
listBox1.Items.Add("成绩:" + score.ToString());
}
public delegate void stuInfoDelegate(string no, string name, double score); //声明委托类型 private void stuThread() //线程方法
{
Invoke(new stuInfoDelegate(showStuIfo), new object[] { "20101001", "张三", 95.5 }); //线程通过方法的委托执行showStuIfo(),实现对ListBox控件的访问 }
private void button1_Click(object sender, EventArgs e)
{
Thread stuth = new Thread(new ThreadStart(stuThread)); //创建线程
stuth.Start(); //执行线程
}
}
}

线程访问ui,使用委托方式的更多相关文章

  1. C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件“Form1”的线程访问它

    C# 委托 / 跨线程访问UI /  线程间操作无效: 从不是创建控件“Form1”的线程访问它 网上的代码都比较复杂,还是这个简单 见代码, 简易解决办法: 主窗体代码 using System; ...

  2. 跨线程访问UI控件时的Lambda表达式

    工作中经常会用到跨线程访问UI控件的情况,由于.net本身机制,是不允许在非UI线程访问UI控件的,实际上跨线程访问UI控件还是 将访问UI的操作交给UI线程来处理的, 利用Control.Invok ...

  3. C# 跨线程访问UI不报错,必须使用Invoke。

    代码有时跨线程访问UI,修改按钮Enable属性不报异常.调试发现修改按钮属性的线程是Background,执行不报异常. 在窗体构造中添加 Control.CheckForIllegalCrossT ...

  4. 2019-10-12-win10-uwp-非ui线程访问-ui-

    title author date CreateTime categories win10 uwp 非ui线程访问 ui lindexi 2019-10-12 15:0:12 +0800 2018-2 ...

  5. .NET设计篇08-线程统一取消模型和跨线程访问UI

    知识需要不断积累.总结和沉淀,思考和写作是成长的催化剂,输出倒逼输入 内容目录 一.线程统一取消模型1.取消令牌2.可以中断的线程1.设计一个中断函数2.创建CancellationTokenSour ...

  6. .NET设计篇08-线程取消模型和跨线程访问UI

    知识需要不断积累.总结和沉淀,思考和写作是成长的催化剂,输出倒逼输入 内容目录 一.线程统一取消模型1.取消令牌2.可以中断的线程1.设计一个中断函数2.创建CancellationTokenSour ...

  7. WPF / Win Form:多线程去修改或访问UI线程数据的方法( winform 跨线程访问UI控件 )

    WPF:谈谈各种多线程去修改或访问UI线程数据的方法http://www.cnblogs.com/mgen/archive/2012/03/10/2389509.html 子线程非法访问UI线程的数据 ...

  8. 理解SynchronizationContext,如何在Winform里面跨线程访问UI控件

    SynchronizationContext 类是一个基类,可提供不带同步的自由线程上下文. 此类实现的同步模型的目的是使公共语言运行库内部的异步/同步操作能够针对不同的异步模型采取正确的行为.此模型 ...

  9. 线程访问ui,托管

    1.在类中声明 delegate void setDebugDelegate(string info);//线程访问textbox委托函数 private void setDebug(string i ...

随机推荐

  1. Struts2中的OGNL详解 《转》

    首先了解下OGNL的概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的 ...

  2. nexus 增加代理仓库 无法搜到snapshot的jar包 解决方法

    如题, nexus 私服 增加了另一个 私服,  但是无法搜到 版本中带有 snapshot字样的 jar包. 环境情况: 1.老私服: 首先版本中带有 snapshot字样的 jar包,是发布在 老 ...

  3. thinkphp---手机访问切换模板!

    手机访问切换模板:一般用在手机在做自适应的情况. 第一步:需要添加判断是否是手机访问的方法: http://www.cnblogs.com/e0yu/p/7561811.html 第二步:Home / ...

  4. 日期提取函数EXTRACT

    EXTRACT extracts and returns the value of a specified datetime field from a datetime or interval exp ...

  5. Java导出Excel表,POI 实现合并单元格以及列自适应宽度(转载)

    POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是: sheet.addMergedRegion(new CellRangeAddress ...

  6. loadrunner多场景的串行执行以及定时执行

    方法一: 既然是脚本串行执行,那在场景设计中必然是要用多个脚本,要注意的是需要将Scenario Schedule中的Schedule by设置为Group的模式.然后按实际需要依次设置每个脚本的Sc ...

  7. Webpack基础入门学习笔记

    # Webpack Project Build 1.创建一个项目目录文件夹 如:D:/demo 2.打开demo文件夹,按住Shift + 鼠标右键,选择[在此处打开命令窗口] 3.初始化npm,生成 ...

  8. asp.net mvc(一) ----------简单封装成通用的List<T>集合

    asp.net mvc(一) 这些天开始学习asp.net mvc,用传统的asp.net已经快四的年了,刚开始接触asp.net mvc确认感觉有点不适应,主要体现在asp.net mvc的实现上. ...

  9. 各大互联网企业Java面试题汇总,看我如何成功拿到百度的offer

    前言 本人Java开发,5年经验,7月初来到帝都,开启面试经历,前后20天左右,主面互联网公司,一二线大公司或者是融资中的创业公司都面试过,拿了一些offer,其中包括奇虎360,最后综合决定还是去百 ...

  10. 当url作为id时的删除

    API Documentation — Elasticsearch 6.3.1 documentation https://elasticsearch-py.readthedocs.io/en/mas ...