简单的C#线程开发实例(隔一秒改变一下Label的Text)
要实现的效果:点击按纽,窗口上的label上出现1~100数字的变化。
第一个实例(把窗口上的label上文字改成0):
using System;
using System.Windows.Forms;
namespace ThreadTest
{
public partial class Form1 : Form
{
public Form1(){InitializeComponent();}
第二个实例(点击button,循环显示0动态变化到100数字):
以上是我们平常的做法,让label动态变化的效果,下面我们开始使用线程来实现上面的功能。
namespace ThreadTest
{
public partial class Form1 : Form
{
private Thread thread1;
public Form1(){InitializeComponent();}
private void Form1_Load(object sender, EventArgs e){label1.Text = "0";}
private void button1_Click(object sender, EventArgs e){thread1 = new Thread(new ThreadStart(run));thread1.Start();}
private void run(){for (int i = 0; i < 101; i++){label1.Text = i.ToString();}}
private void set_lableText(string s) { label1.Text = s; } 当需要改变lable1的值时,就调用它,并传递要改变的值。
第六个实例:
using System;
using System.Windows.Forms;
namespace ThreadTest
{
public partial class Form1 : Form
{
public Form1(){InitializeComponent();}
private void Form1_Load(object sender, EventArgs e){label1.Text = "0";}
private void button1_Click(object sender, EventArgs e){run(); //调用run函数}
private void run(){for(int i=0;i<101;i++){set_lableText( i.ToString() );}}
到这里,需要了解一下委托这个东西,我们就需要委托主线程调用函数set_lableText(string s);来改变lable1的值。
首先声明一个委托: delegate void set_Text(string s);
创建一个全局委托变量: set_Text Set_Text;
进行实例化: Set_Text = new set_Text(set_lableText); //括号内的set_lableText是委托要调用的函数(也就是例6写的set_lableText(string s);函数)
现在,就剩下调用委托了,怎么调用委托呢?很简单。 同过Invoke来调用,语句如下:
label1.Invoke(Set_Text, new object[] { i.ToString() }); //Set_Text是调用的委托,object[]则是我们要传递的参数
整理代码如下,第七个实例:
using System;
using System.Threading;
using System.Windows.Forms;
namespace ThreadTest
{
public partial class Form1 : Form
{
private Thread thread1; //定义线程
delegate void set_Text(string s); //定义委托
set_Text Set_Text; //定义委托变更
public Form1(){InitializeComponent();}
private void Form1_Load(object sender, EventArgs e){label1.Text = "0"; Set_Text = new set_Text(set_lableText); //实例化}
private void button1_Click(object sender, EventArgs e){thread1 = new Thread(new ThreadStart(run)); thread1.Start();}
private void set_lableText(string s){label1.Text = s;}//主线程调用的函数
private void run()
{
for (int i = 0; i < 101; i++)
{
label1.Invoke(Set_Text, new object[] { i.ToString() }); //通过调用委托,来改变lable1的值
Thread.Sleep(1000); //线程休眠时间,单位是ms
}
}
简单的C#线程开发实例(隔一秒改变一下Label的Text)的更多相关文章
- C#一个简单的关于线程的实例
很多初学者听到线程会觉得晦涩难懂,很多资料一堆专有名词也是让人心烦意乱,本着学习加分享的态度,这里做一个简单的实例分享帮助初学者们初识多线程. 首先大概讲述一下多线程和多进程的区别,任务管理器里各种 ...
- Hibernate入门2.简单的项目开发实例
Hibernate入门2.简单的项目开发实例 这一节通过一个简单的项目学习Hibernate项目的配置 代码下载 : 链接: http://pan.baidu.com/s/1zlgjl 密码: p34 ...
- WCF揭秘(一)——简单的WCF开发实例
一.WCF是什么 WCF是微软为了实现各个开发平台之间的无疑缝连接而开发一种崭新工具,它是为分布式处理而开发.WCF将DCOM.Remoting.Web Service.WSE.MSMQ.AJAX服务 ...
- c++简单的ATL COM开发和调用实例(转)
c++简单的ATL COM开发和调用实例 1.打开VS2010,新建ATL COM 项目,步骤:“文件” -->“新建” -->“项目”,选择“Visual C++” -->“ATL ...
- 《HTML 5网页开发实例具体解释》样章、内容简单介绍、前言
http://spu.jd.com/1167757597.html http://product.dangdang.com/23484942.html 样章 http://download.csdn. ...
- Android音乐播放器的开发实例
本文将引导大家做一个音乐播放器,在做这个Android开发实例的过程中,能够帮助大家进一步熟悉和掌握学过的ListView和其他一些组件.为了有更好的学习效果,其中很多功能我们手动实现,例如音乐播放的 ...
- 持久化框架Hibernate 开发实例(一)
1 Hibernate简介 Hibernate框架是一个非常流行的持久化框架,其中在web开发中占据了非常重要的地位, Hibernate作为Web应用的底层,实现了对数据库操作的封装.HIberna ...
- 基于线程开发一个FTP服务器
一,项目题目:基于线程开发一个FTP服务器 二,项目要求: 基本要求: 1.用户加密认证 2.允许同时多用户登录 3.每个用户有自己的家目录 ,且只能访问自己的家目录 4.对用户进行磁盘配 ...
- RDIFramework.NET -.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(WebForm版)
RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(WebForm版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之 ...
随机推荐
- [转]Android 应用的自动升级、更新模块的实现
本文转自:http://www.oschina.net/question/163910_28462 我们看到很多Android应用都具有自动更新功能,用户一键就可以完成软件的升级更新.得益于Andro ...
- Python 标准库 urllib2 的使用细节[转]
转自[http://zhuoqiang.me/python-urllib2-usage.html] Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比 ...
- CF Preparing Olympiad (DFS)
Preparing Olympiad time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 添加iPhone设备的udid之后,重新生成开发证书(Development)
选择Provisioning profiles-Development-添加 ,如图:
- 十大Intellij IDEA快捷键(转)(2015年06月15日)
注:本文转自:http://blog.csdn.net/dc_726/article/details/42784275 Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow ...
- backbone.Collection源码笔记
Backbone.Collection backbone的Collection(集合),用来存储多个model,并且可以多这些model进行数组一样的操作,比如添加,修改,删除,排序,插入,根据索引取 ...
- iOS UIView常用方法和属性
UIView常用方法 addSubView: // 添加子视图 insertSubview: atIndex // 视图插入到指定索引位置 insertSubview:aboveSubview: // ...
- MySQL配置管理
数据库的链接: 获取项目结果集和链接: package Dao; import java.sql.Connection; import java.sql.ResultSet; import java. ...
- 番外篇 之 C#委托
对于上一节 番外篇之C#多线程的反思 反思一: Thread th = new Thread(参数); ////参数的总结 ////首先,第一情况,对于 Thread th = new Threa ...
- Excel VBA 快捷键 代码
一. 在ThisWorkbook中 Private Sub Workbook_Open() '%对应alt键 宏不能加() Application.OnKey "%q", &quo ...