多线程(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 ...
随机推荐
- mysqll 数据库相互堵塞问题
192.168.11.186 远程访问192.168.11.185 数据库 186上看到: centos6.5:/root#mysql -uroot -p'kjk123123' -h192.168.1 ...
- init进程 && 解析Android启动脚本init.rc && 修改它使不启动android && init.rc中启动一个sh文件
Android启动后,系统执行的第一个进程是一个名称为init 的可执行程序.提供了以下的功能:设备管理.解析启动脚本.执行基本的功能.启动各种服务.代码的路径:system/core/init,编译 ...
- java httpclient post 文件到server
public void sendFileToServer (String url, File logFiles) { HttpURLConnection connection = nul ...
- POJ_3662_Telephone_Lines_(二分+最短路)
描述 http://poj.org/problem?id=3662 给一张图,要将1与n连起来.可以有k条边免费,其他边自费,付费的值为所有自费边中最大的值.求最小付费. Telephone Line ...
- linux kernel API and google android compile guide
(1)linux kernel API website: http://docs.knobbits.org/local/linux-doc/html/regulator/index.html http ...
- 安装PyQt
下载PyQt(版本一定要对) http://www.riverbankcomputing.com/software/pyqt/download import sys,urllib2 from HTML ...
- ADO.NET 增删查改小总结
转自:http://www.cnblogs.com/ashu123/archive/2010/10/10/ado_1.html 三套路-----增删改 1 using System.Data.SqlC ...
- java 枚举(括号赋值)
详解在这里 要注意的是: 1. 通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错2. 赋值必须都赋值或都不赋值,不能一部分赋值一部分不赋值:如果不赋值则不能写构造器,赋值编译也出错 ...
- Web---JS-返回上一页并刷新代码整理
返回上一页并刷新在此功能有利于用户的体验,是每一个web开发人员所必备的一项,长话短说,今天介绍实现此功能的一个方法,需要了解的朋友可以参考下: 一:JS 重载页面,本地刷新,返回上一页 代码如下: ...
- SQL SERVER 自定义函数 整数转成指定长度的16进制 转换成指定长度的16进制 不足补0
最近做项目扩展的时候,遇到问题就是将整型转换成指定长度的16进制 刚开始就是直接使用 cast(12 as varbinary(4))但是发现这个不能解决我的问题 所以就上网搜了一下,然后改了改,下面 ...