• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#线程定义和使用方法详解

C#线程定义和使用方法详解

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#定义一个线程,c#定义线程,c#自定义线程,c#线程,c#线程使用等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

一、C# Thread类的基本用法

通过System.Threading.Thread类可以开始新的线程,并在线程堆栈中运行静态或实例方法。可以通过Thread类的的构造方法传递一个无参数,并且不返回值(返回void)的委托(ThreadStart),这个委托的定义如下:

[ComVisibleAttribute(true)]

public delegate void ThreadStart()

我们可以通过如下的方法来建立并运行一个线程。

除了运行静态的方法,还可以在线程中运行实例方法,代码如下:

如果读者的方法很简单,或出去某种目的,也可以通过匿名委托或Lambda表达式来为Thread的构造方法赋值,代码如下:

其中Lambda表达式前面的( )表示没有参数。

为了区分不同的线程,还可以为Thread类的Name属性赋值,代码如下:

如果将上面thread1至thread5放到一起执行,由于系统对线程的调度不同,输出的结果是不定的,如图1是一种可能的输出结果。

二、 定义一个线程类

我们可以将Thread类封装在一个MyThread类中,以使任何从MyThread继承的类都具有多线程能力。MyThread类的代码如下:

可以用下面的代码来使用MyThread类。

我们还可以利用MyThread来为线程传递任意复杂的参数。详细内容见下节。

三、C# Thread类:为线程传递参数

Thread类有一个带参数的委托类型的重载形式。这个委托的定义如下:

[ComVisibleAttribute(false)]

public delegate void ParameterizedThreadStart(Object obj)

 

这个Thread类的构造方法的定义如下:

public Thread(ParameterizedThreadStart start);
下面的代码使用了这个带参数的委托向线程传递一个字符串参数:

要注意的是,如果使用的是不带参数的委托,不能使用带参数的Start方法运行线程,否则系统会抛出异常。但使用带参数的委托,可以使用thread.Start()来运行线程,这时所传递的参数值为null。

也可以定义一个类来传递参数值,如下面的代码如下:

如果使用在第二节定义的MyThread类,传递参数会显示更简单,代码如下:

四、前台和后台线程

使用Thread建立的线程默认情况下是前台线程,在进程中,只要有一个前台线程未退出,进程就不会终止。主线程就是一个前台线程。而后台线程不管线程是否结束,只要所有的前台线程都退出(包括正常退出和异常退出)

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#线程定义和使用方法详解

相关文章

  • 2017-05-28利用C#代码实现图片旋转360度
  • 2017-05-28C#使用有道ip地址查询接口方法实例详解
  • 2017-05-28C#基于纯数学方法递归实现货币数字转换中文功能详解
  • 2017-05-28C#创建安全的字典(Dictionary)存储结构
  • 2017-05-28基于mvc5+ef6+Bootstrap框架实现身份验证和权限管理
  • 2017-05-28C#读取Excel的三种方式以及比较分析
  • 2017-05-28C#实现通过模板自动创建Word文档的方法
  • 2017-05-28c# DateTime常用操作实例(datetime计算时间差)
  • 2017-05-28基于C#实现的三层架构实例
  • 2017-05-28使用位运算实现网页中的过滤、筛选功能实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 通过C#调用cmd来修改服务启动类型
    • C#语言主要特性总结
    • Windows系统中C#调用WinRAR来压缩和解压缩文件的方法
    • C#进度轴控件分享
    • 无法从 int? 转换为 int 运行时出现错误
    • 常用正则 常用的C#正则表达式
    • C#向图片添加水印的两种不同场景与解决方法
    • C# 常用协议实现模版及FixedSizeReceiveFilter示例(SuperSocket入门)
    • C#类的访问修饰符用法分析
    • 使用C#获取远程图片 Form用户名与密码Authorization认证的实现

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有