多线程(Thread),其实很简单!
目录:
1:线程简介
2:怎么操作线程
4:简单的获奖机
5:应用程序域
多线程可以让一个程序“同时”处理多个事情。
后台运行程序,提高程序的运行效率,也不会使主界面出现无响应的情况
创建线程:
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():返回当前线程正在其中运行的当前域。
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 = "开始";
}
}
}
}
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),其实很简单!的更多相关文章
- Delphi 的多线程使用已经很简单了
先看一个非多线程的例子, 代码执行时不能进行其它操作(譬如拖动窗体): {自定义方法: 在窗体上绘制...} procedure MyMethod; var i: Integer; begin ...
- Java多线程Thread
转自:http://www.cnblogs.com/lwbqqyumidi/p/3804883.html Java总结篇系列:Java多线程(一) 多线程作为Java中很重要的一个知识点,在此还是 ...
- 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 ...
- 异步和多线程Thread
刚接触线程的时候,感觉这个东西好神奇.虽然不是很明白,就感觉它很牛逼. 参考了一些大佬写的文章: https://www.cnblogs.com/yilezhu/p/10555849.html这个大佬 ...
- 多线程-Thread和ThreadPool
多线程原理 多线程都是基于委托的. 多线程优缺点 缺点: 1.导致程序复杂,开发调试维护困难,特别是线程交互. 2.线程过多导致服务器卡死,因为占用CPU 内存等资源. 优点: 1.良好的交互,特别对 ...
- 很简单的Java断点续传实现原理
原理解析 在开发当中,"断点续传"这种功能很实用和常见,听上去也是比较有"逼格"的感觉.所以通常我们都有兴趣去研究研究这种功能是如何实现的? 以Java来说,网 ...
- 2.匿名类,匿名类对象,private/protected/public关键字、abstract抽象类,抽象方法、final关键字的使用,多线程Thread类start方法原理
package com.bawei.multithread; //注意:模板方法我们通常使用抽象类或者抽象方法!这里我们为了方便在本类中使用就没有使用抽象类/抽象方法 public class Tem ...
- 多线程--Thread.join方法
在Thread类的Api中,Join的作用是让当前线程等待目标线程结束之后才继续执行. thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程. 比如在线程B ...
- 【玩转SpringBoot】看似复杂的Environment其实很简单
喜欢写代码,讨厌配环境 我相信这十个字的小标题代表了大多数码农的心声. 十年前读大学时,学校开设了C语言还有C++.但是学习这两种语言,对于新手来说非常没有成就感. 于是我就在校门口买个光盘,装个VS ...
随机推荐
- 【简译】Windows 线程基础
翻译一篇关于windows线程的文章,原文在此.第一次翻译,如有错误请多指教 =========================================华丽的分割线============== ...
- jQueryEasyUI中DataGrid的height,width,fit,fitColumns属性
height: 600, //不指定则默认垂直包裹,指定了则固定 width:1200,//不指定则水平100%平铺,指定了则固定 fit:false,//true:高度填充父窗体,忽略height属 ...
- bzoj1232
由题意知,最后要保留的边肯定都要被走过 来回一条边所花费的时间=2*边长+安慰边两端的牛所要花的时间和 总时间就等于所保留边来回的时间和+根节点时间: 不难想到做一下最小生成树即可 贪心可知,根一定选 ...
- Apache Commons IO 2.3 几点用法
//直接将IO流转成字符串 InputStream in = new URL( "http://jakarta.apache.org" ).openStream(); try { ...
- HDOJ/HDU 1180 诡异的楼梯(经典BFS-详解)
Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在 ...
- .net 加水印 图片变大很多 解决方法
/// 给图片加水印 中国红木网 /// </summary> /// <param name="originalImg"> ...
- python中类的继承
python中类的继承 在python中面向对象编程中实现继承,以下面一个实例进行说明. class SchoolMenber(): # __init__类似于c++中的构造函数 # __init__ ...
- 解决Scrapy抓取中文结果保存为文件时的编码问题
import json import codecs # Define your item pipelines here # # Don't forget to add your pipeline to ...
- Linux,实时获取磁盘空间
#include <iostream> #include <stdlib.h> #include <stdio.h> #include <sys/statfs ...
- Yii框架tips
db组件 'schemaCachingDuration'=>3600, 为什么不起做用?需要开缓存 如何在页面下边显示sql的查询时间在log组件的routes中加入 array('class' ...