C# 线程中更新界面控件
来源:互联网 发布:中国崩溃论 知乎 编辑:程序博客网 时间:2024/05/06 14:54
在我们开发软件时经常会需要跟新界面上的某个控件来显示相关的信息。
当我们的界面需要在程序运行中不断更新数据时,当一个textbox的数据需要变化时,为了让程序执行中不出现界面卡死的现像,最好的方法就是多线程来解决
一个主线程来创建界面,使用一个子线程来执行程序并更新主界面,这样就不会出现卡死的现像了,这肯定是没有问题的,但是,我们会发现如果我们在子线程中去变动一个不是在这个线程中创建的控件的时候,系统会报错,这个时候我们就需要使用到委托来完成这个操作。
委托是C#编程一个非常重要的概念,网络上经常会有人说委托是什么?代理是什么?区别是什么?
其实委托和代理是同一个概念,只是没有明确的官方同一定义所以,你翻译为委托,我翻译成代理就这么多区别。
delegate 是关键词,【注:EventHandler是一个声明委托的微软C#的命名标准,我的习惯是标准就要第一时间说,也就这个命名习惯要第一时间养成】
完了,这就是委托,就这么简单,看看和我们一般的方法有什么区别呢?
委托类型声明:
(1) 以deleagate关键字开头。
(2)返回类型+委托类型名+参数列表。
言归正传
要实现标题的问题解决;简单的几步就可以
1.定义一个委托;
2.绑定一个方法;
3.子线程中调用执行
代码如下:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.Threading;namespace ThreadUpdateUI{ public partial class Form1 : Form { Thread myThread; public delegate void InitMainUI(); InitMainUI myMainUI; private void initAll() { richTextBox1.AppendText("TEST line \r"); } public Form1() { InitializeComponent(); myThread = new Thread(doWork); myMainUI = new InitMainUI(initAll); } private void doWork() { for(int i=0;i <10;i++) { Thread.Sleep(1000); //richTextBox1.AppendText("test directly!"); this.Invoke(myMainUI); Application.DoEvents(); } } private void button1_Click(object sender, EventArgs e) { myThread.Start(); } }}
0 0
- C# 线程中更新界面控件
- C# 线程中更新界面控件
- c#工作线程中去更新界面显示
- C# Winform使用线程,委托定时更新界面UI控件,解决界面卡顿问题
- wxpython后台线程更新界面控件方法
- VS2005中更新其他线程访问界面线程控件的方法
- c# QQ2010 界面控件集更新
- C#界面之与WinForm自带控件对应的DEV控件(持续更新中...)
- 界面主线程,子线程更新主界面控件
- c# 线程中更新UI
- C# 委托实现跨线程更新控件
- C#线程更新UI控件笔记
- 工作线程中如何更新界面
- 子线程中更新ui界面
- c# WinCE 界面控件被锁定、不可用 在线程执行中
- C#线程中访问控件
- 在线程中操作界面控件
- ASP.NET线程中更新UI控件
- 算法提高 不同单词个数统计
- DSO示波器的带宽和采样率
- javascript===和==,xml中<></>和</>区别
- javascript中的var,let和const
- 用正则表达式匹配电话号码
- C# 线程中更新界面控件
- 《算法新解》作者刘新宇:我只是想打开那些黑盒子,告诉人们里面有什么。
- 406. Queue Reconstruction by Height
- Linux下C库学习 - setjmp.h
- 下拉菜单的练习
- python题目-----去除list中重复元素
- golang中自带base64编码和解码
- js判断div高度及设置父窗口iframe高度
- 网络编程基础(1) : 网路模型简介+同步阻塞实例