目录:

 1:线程简介

2:怎么操作线程

4:简单的获奖机

    5:应用程序域

 
线程是Windows任务调度的最小单位。线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。
作用:
   让计算机"同时"做多件事情,节约时间。

  多线程可以让一个程序“同时”处理多个事情。

  后台运行程序,提高程序的运行效率,也不会使主界面出现无响应的情况

 
解决问题:进程是一个资源的拥有者,因而在进程的创建、撤销、和切换的过程中,系统必须为之付出较大的时空开销,限制了并发程度的进一步提高
 
怎么操作线程?

创建线程:

1:初始化

Thread thread = new Thread(ThreadWorkFun);//ThreadWorkFun是一个委托

2:

  new Thread(() =>
{
Console.WriteLine("ok");
}
).start();

开启线程:

 thread.Start();

一个具体的例子:

        //任何代码都执行在线程中的,当前main方法执行在主线程中,(也就是默认线程)
static void Main(string[] args)
{
//创建一个线程,执行当然线程的执行入口ThreadWork
Thread thread = new Thread(ThreadWork);
thread.Start();//告诉线程你可以调度我了
Console.WriteLine("==============结束");
Console.ReadKey();
}
static void ThreadWork()
{
for (int i = ; i < ; i++)
{
Console.WriteLine(i);
}
}

结果:结果不确定,ThreadWorkFun什么时候执行,由操作系统决定,

注意:当线程指向的方法体执行完成的时候就自动销毁了

Thread的常用属性和方法

  Abort():在调用此方法的线程上引发 ThreadAbortException,终止线程--尽量少用,因为会抛出异常,如果抛异常会极大影响效率。

    GetDomain():返回当前线程正在其中运行的当前域。

   Priority:设置线程的优先级   thread.Priority = ThreadPriority.Highest;
        ManagedThreadId:  int num= thread.ManagedThreadId;//线程的编号,可以用于区分不同的线程
        CurrentThread.Name :获得当前线程的名字

Join:线程等待

 thread.join();//哪个线程执行当前代码的线程等待这个线程执行完成

  IsBackground:获取或设置一个值,该值指示某个线程是否为后台线程,值默认是false:前台线程:只有所有的前台线程都关闭才能完成程序关闭。后台线程:只要所有的前台线程结束,后台线程自动结束

 多线程实现的摇奖机

namespace 摇奖器
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InitLabel();
InitName(); }
public Label label = new Label();
public Dictionary<int, string> Dic = new Dictionary<int, string>();
bool IsTure;
public void InitLabel()
{
label.Text = "";
label.Location = new Point(, );
label.AutoSize = true;
this.Controls.Add(label);
}
public void InitName()
{
string[] names = File.ReadAllLines("name.txt",Encoding.Default);
for (int i = ; i < names.Length; i++)
{
Dic.Add(i, names[i]);
}
} private void Form1_Load(object sender, EventArgs e)
{
IsTure = false;
} private void btnBegin_Click(object sender, EventArgs e)
{
if (btnBegin.Text == "开始")
{
btnBegin.Text = "结束";
IsTure = true;
new Thread(() =>
{
Random r = new Random();
while (IsTure)
{
if (label.InvokeRequired)//判段lable标签是否是由当前线程创建的,解决跨线程调用的问题
{
Action SetLabelText=delegate()//匿名委托
{
label.Text = Dic[r.Next(, Dic.Count)];
};
label.Invoke(SetLabelText);
}
Thread.Sleep();//当前线程休息一下
} }).Start();
}
else
{
IsTure = false;
btnBegin.Text = "开始";
}
}
}
}
应用程序域:只有DotNet程序才会有的概念
 应用程序域就是隔离exe。可以加载多个程序集,
一个进程可以有多个应用程序域
一个应用程序域可以跑多个线程
一个线程同一时间只可以执行在一个应用程序域里面,但线程可以穿透应用程序域
例子:
       static void Main(string[] args)
{
AppDomain appDomain = AppDomain.CreateDomain("ghr");// 创建一个应用程序域
appDomain.ExecuteAssembly("QQ.exe");//启动qq程序
Console.WriteLine("主域执行完成");
}

了解更多:http://msdn.microsoft.com/zh-cn/library/system.threading.thread_members

多线程(Thread),其实很简单!的更多相关文章

  1. Delphi 的多线程使用已经很简单了

    先看一个非多线程的例子, 代码执行时不能进行其它操作(譬如拖动窗体): {自定义方法: 在窗体上绘制...} procedure MyMethod; var   i: Integer; begin   ...

  2. Java多线程Thread

    转自:http://www.cnblogs.com/lwbqqyumidi/p/3804883.html Java总结篇系列:Java多线程(一)   多线程作为Java中很重要的一个知识点,在此还是 ...

  3. c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习

    c#中@标志的作用   参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...

  4. 异步和多线程Thread

    刚接触线程的时候,感觉这个东西好神奇.虽然不是很明白,就感觉它很牛逼. 参考了一些大佬写的文章: https://www.cnblogs.com/yilezhu/p/10555849.html这个大佬 ...

  5. 多线程-Thread和ThreadPool

    多线程原理 多线程都是基于委托的. 多线程优缺点 缺点: 1.导致程序复杂,开发调试维护困难,特别是线程交互. 2.线程过多导致服务器卡死,因为占用CPU 内存等资源. 优点: 1.良好的交互,特别对 ...

  6. 很简单的Java断点续传实现原理

    原理解析 在开发当中,"断点续传"这种功能很实用和常见,听上去也是比较有"逼格"的感觉.所以通常我们都有兴趣去研究研究这种功能是如何实现的? 以Java来说,网 ...

  7. 2.匿名类,匿名类对象,private/protected/public关键字、abstract抽象类,抽象方法、final关键字的使用,多线程Thread类start方法原理

    package com.bawei.multithread; //注意:模板方法我们通常使用抽象类或者抽象方法!这里我们为了方便在本类中使用就没有使用抽象类/抽象方法 public class Tem ...

  8. 多线程--Thread.join方法

    在Thread类的Api中,Join的作用是让当前线程等待目标线程结束之后才继续执行. thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.  比如在线程B ...

  9. 【玩转SpringBoot】看似复杂的Environment其实很简单

    喜欢写代码,讨厌配环境 我相信这十个字的小标题代表了大多数码农的心声. 十年前读大学时,学校开设了C语言还有C++.但是学习这两种语言,对于新手来说非常没有成就感. 于是我就在校门口买个光盘,装个VS ...

随机推荐

  1. dom4j中 selectSingleNode 或selectNodes获取不到节点的原因总结 (转)

    没想到搞个dom4j会出这么多怪错.. 最近在研究XBRL GL的有关内容,在项目中要求吧XBRL GL导入到11179注册库中,根据11179建立数据库,然后从XBRL GL分类标准中导入数据到数据 ...

  2. 【转】c++重载、覆盖、隐藏——理不清的区别

    原文网址:http://blog.sina.com.cn/s/blog_492d601f0100jqqm.html 再次把林锐博士的<高质量c++编程指南>翻出来看的时候,再一次的觉得这是 ...

  3. 【转】Android 4.2蓝牙介绍

    原文网址:http://blog.csdn.net/innost/article/details/9187199 Tieto公司某蓝牙大牛写得<程序员>投稿文章 Android 4.2蓝牙 ...

  4. C#数据库连接字符串

    转自:http://blog.csdn.net/xiaokexinger/article/details/1541441 在MSDN中,.net的数据库连接字符串都有详细的说明,我这里以代码范例的方式 ...

  5. C# partial 局部类型

    关键字partial是一个上下文关键字,只有和 class.struct.interface 放在一起时才有关键字的含义.因此partial的引入不会影响现有代码中名称为partial的变量.局部类型 ...

  6. 升级到 ExtJS 5的过程记录

    升级到 ExtJS 5的过程记录   最近为公司的一个项目创建了一个 ExtJS 5 的分支,顺便记录一下升级到 ExtJS 5 所遇到的问题以及填掉的坑.由于 Sencha Cmd 的 sencha ...

  7. Asp.net MVC Razor Generator

    Razor Generator开源工具使用简介: “Razor Generator” 前生“Razor Single File Generator for MVC” 这可以将MVC视图文件[.csht ...

  8. Ubuntu----1

    1. 安装ubuntu之后,你必须要做的事情, 引自:http://itsfoss.com/things-to-do-after-installing-ubuntu-13-04/ 但是对于国人来讲,墙 ...

  9. [SAM4N学习笔记]按键程序(中断方式)

    一.准备工作:      将上一节搭建的工程复制一份,命名为"6.key interrupt".这一节主要讲如何使用SAM4N的GPIO中断功能,实现按键的中断输入. 二.程序编写 ...

  10. javascript检测属性

    javascript 对象可以看做属性的集合.我们可以通过三种方式来判断某个属性是否存在于某个对象中. 1.in操作符 var o={x:1} "x" in o //True :x ...