可以认为线程是一个虚拟进程,用于独立运行一个特定的程序。

1.使用c#创建线程

using System;
using System.Threading; //3 namespace MutiThreadDemo
{
class Program
{
static void Main(string[] args)
{
//5
Thread t = new Thread(PrintNumber);
t.Start();
PrintNumber();
Console.ReadLine();
}
//4
static void PrintNumber()
{
Console.WriteLine("Starting ...");
for(int i = ;i< ; i++)
{
Console.WriteLine(i);
}
}
}
}

在上面的代码中,步骤4定义了方法 PrintNumber , 该方法会被主线程和新创建的线程使用。

在我们构造一个线程时,ThreadStart 或 ParameterizedThreadStart 的实例委托会传给构造函数。

我们只需指定在不同线程运行的方法名,而 c# 编译器则会在后台创建这些对象。

运行结果:两组范围为1 -10的数字会随机交叉输出。这说明了PringNumber方法同时运行在主线程和另一个线程。(如果10个数字随机交叉不明显,可以增加到100试试)

2.暂停线程

这里展示如何让一个线程等待一段时间而不用消耗操作系统资源。

using System;
using System.Threading; namespace MutiThreadDemo
{
class ThreadSleep
{
static void Main(string[] args)
{
Thread t = new Thread(PrintNumbersWithDelay);
t.Start();
PrintNumbers();
Console.ReadLine();
} static void PrintNumbers()
{
Console.WriteLine("Starting ...");
for (int i = ; i < ; i++)
{
Console.WriteLine(i);
}
} static void PrintNumbersWithDelay()
{
Console.WriteLine("Starting ...");
for(int i = ; i < ; i++)
{
Thread.Sleep(TimeSpan.FromSeconds(2));
Console.WriteLine(i);
}
}
}
}

在PrintNumbersWithDeplay方法中加入了Thread.Sleep方法调用。这会导致线程在执行该代码时,在打印任何数字之前会等待指定的时间(这里是2秒钟)。

3.线程等待

这里将展示如何让程序等待另一个程序中的计算完成,然后在代码中使用该线程的计算结果

使用Thread.Sleep行不通,因为并不知道计算需要花费的具体时间。

using System;
using System.Threading; namespace MutiThreadDemo
{
class Thread_Join
{
static void Main(string[] args)
{
Console.WriteLine("Starting ...");
Thread t = new Thread(PrintNumbersWithDeplay);
t.Start();
t.Join();
Console.WriteLine("Thread completed");
Console.ReadLine();
} static void PrintNumbersWithDeplay()
{
Console.WriteLine("Starting ...");
for (int i = ; i < ; i++)
{
Thread.Sleep(TimeSpan.FromSeconds());
Console.WriteLine(i);
}
} }
}

运行结果:

当程序运行时,启动了一个耗时较长的线程来打印数字,打印每个数字前要等待两秒。

但是我们在主程序中调用了 t.Join 方法,该方法允许我们等待直到线程 t 完成。

当线程 t 完成时,主程序会继续运行。

借助该技术可以实现在两个线程间同步执行步骤。

4.终止线程

...

c#之线程基础(一)的更多相关文章

  1. Qt之线程基础

    何为线程 线程与并行处理任务息息相关,就像进程一样.那么,线程与进程有什么区别呢?当你在电子表格上进行数据计算的时候,在相同的桌面上可能有一个播放器正在播放你最喜欢的歌曲.这是一个两个进程并行工作的例 ...

  2. Android多线程研究(1)——线程基础及源代码剖析

    从今天起我们来看一下Android中的多线程的知识,Android入门easy,可是要完毕一个完好的产品却不easy,让我们从线程開始一步步深入Android内部. 一.线程基础回想 package ...

  3. JAVA与多线程开发(线程基础、继承Thread类来定义自己的线程、实现Runnable接口来解决单继承局限性、控制多线程程并发)

    实现线程并发有两种方式:1)继承Thread类:2)实现Runnable接口. 线程基础 1)程序.进程.线程:并行.并发. 2)线程生命周期:创建状态(new一个线程对象).就绪状态(调用该对象的s ...

  4. 【windows核心编程】 第六章 线程基础

    Windows核心编程 第六章 线程基础 欢迎转载 转载请注明出处:http://www.cnblogs.com/cuish/p/3145214.html 1. 线程的组成 ①    一个是线程的内核 ...

  5. C#当中的多线程_线程基础

    前言 最近工作不是很忙,想把买了很久了的<C#多线程编程实战>看完,所以索性把每一章的重点记录一下,方便以后回忆. 第1章 线程基础 1.创建一个线程 using System; usin ...

  6. Qt 线程基础(Thread Basics的翻译,线程的五种使用情况)

    Qt 线程基础(QThread.QtConcurrent等) 转载自:http://blog.csdn.net/dbzhang800/article/details/6554104 昨晚看Qt的Man ...

  7. 线程基础(CLR via C#)

    1.线程基础  1.1.线程职责  线程的职责是对CPU进行虚拟化.Windows 为每个进程豆提供了该进程专用的线程(功能相当于一个CPU).应用程序的代码进入死循环,于那个代码关联的进程会&quo ...

  8. Linux 系统应用编程——线程基础

    传统多任务操作系统中一个可以独立调度的任务(或称之为顺序执行流)是一个进程.每个程序加载到内存后只可以唯一地对应创建一个顺序执行流,即传统意义的进程.每个进程的全部系统资源是私有的,如虚拟地址空间,文 ...

  9. python2 线程基础

    1,感谢菜鸟教程, 线程基础:导入,创建函数,创建线和运行 import thread import time # 为线程定义一个函数 def print_time(threadName, delay ...

  10. 《CLR via C#》读书笔记 之 线程基础

    第二十五章 线程基础 2014-06-28 25.1 Windows为什么要支持线程 25.2 线程开销 25.3 停止疯狂 25.6 CLR线程和Windows线程 25.7 使用专用线程执行异步的 ...

随机推荐

  1. Web框架之Gin

    Gin是一个用Go语言编写的web框架.它是一个类似于martini但拥有更好性能的API框架, 由于使用了httprouter,速度提高了近40倍. 如果你是性能和高效的追求者, 你会爱上Gin. ...

  2. jumper-server-第一次粗略配置

    https://www.cnblogs.com/zsl-find/articles/11179450.html

  3. Android 开发系列教程之(一)Android基础知识

    什么是Android Android一词最早是出现在法国作家维里耶德利尔·亚当1986年发表的<未来夏娃>这部科幻小说中,作者利尔·亚当将外表像人类的机器起名为Android,这就是And ...

  4. Winform中使用代码编写Button按钮的点击事件

    场景 一般在进行Winform窗体开发时都会拖拽一个Button,然后双击进入Button按钮的点击事件中,进行 点击事件的编写. 如果窗体上事先没有Button按钮,是在代码中生成的Button按钮 ...

  5. linux环境上anaconda的安装与卸载

    首先下载linux上anaconda的安装包: $ wget https://repo.anaconda.com/archive/Anaconda3-5.1.0-Linux-x86_64.sh 然后赋 ...

  6. Linux 修改 ls 时间显示格式

    [root@CentosTe tmp]# export TIME_STYLE='+%Y-%m-%d %H:%M:%S'[root@CentosTe tmp]# ll总计 24-rwx------ 1  ...

  7. ##发送post时,设置了utf-8,中文还是乱码?

    发送post时,设置了utf-8,中文还是乱码? 我们用HttpUrlConnection或HttpClient发送了post请求,其中有中文,虽然我们两边都设置了utf-8,但还是乱码? 我们在re ...

  8. Linux6.x 更换国内比较快的yum源-通用版

    ----------更换国内比较快的yum源----------- ----------163--------- cd /etc/yum.repos.d mv CentOS-Base.repo Cen ...

  9. 【django】分页

    分页 1.简单分页 from django.conf.urls import url from django.contrib import admin from app01 import views ...

  10. layDate——设置最大日期不能超过当前日期

    例如,当前年份是2018年,实现效果如下,2018年之后年份不可操作: 具体代码实现: layui.use([ 'laydate'], function () { var laydate = layu ...