目录:

 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. USB Type-C“三剑客”: 连接器、控制器和电缆

    USB Type-C™是最新的有关电缆布线的USB连接器标准.您会看到,从笔记本电脑.智能手机.闪存到视频系统,这些设备上有一个小型可逆的Type-C连接器.由于Type-C电缆既可以给主机和设备提供 ...

  2. MySQL源码之两阶段提交

    在双1的情况下,两阶段提交的过程 环境准备:mysql 5.5.18, innodb 1.1 version配置: sync_binlog=1 innodb_flush_log_at_trx_comm ...

  3. poj3415

    很久以前写的,忘补结题报告了两串相连中间用特殊的分隔符然后求height,由于要求求公共子串大于等于k的个数,并且只要位置不同即可因此不难想到在名次上对height分组,一组内的height保证> ...

  4. POJ_3579_Median_(二分,查找第k大的值)

    描述 http://poj.org/problem?id=3579 给你一串数,共C(n,2)个差值(绝对值),求差值从大到小排序的中值,偶数向下取. Median Time Limit: 1000M ...

  5. (转载)javascript经典例子

    (转载)http://www.blogjava.net/hadeslee/archive/2007/11/24/161778.html 一.验证类1.数字验证内1.1 整数1.2 大于0的整数 (用于 ...

  6. Delphi的BPL介绍和使用 转

    了解BPL和DLL的关系将有助于我们更好地理解DELPHI在构件制作.运用和动态.静态编译的工作方式.对初学DELPHI但仍对DELPHI开发不甚清晰的朋友有一定帮助.BPL vs. DLL(原文ht ...

  7. Uniform resource name

        A uniform resource identifier (URI) is a uniform resource locator(定位器,探测器) (URL), uniform resour ...

  8. hdoj 3952 World Exhibition

    World Exhibition Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  9. hdoj 1564 Play a game

    Play a game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  10. Java反射机制学习

    Java 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”. 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答 ...