多线程
C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行。一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为“主线程”)自动创建的,并具有多线程创建额外的线程。
进程
Process press = Process.Start("iexplore.exe", "www.baidu.com"); //启动一个进程
var processes = Process.GetProcesses(); //获得本地进程
foreach (var item in processes)
{
Console.WriteLine(item.ProcessName);
}
获取当前进程 睡100秒,在关掉
Process p = Process.GetCurrentProcess();
Thread.Sleep(100);
p.Kill();
应用程序域
AppDomain.Unload(AppDomain.CurrentDomain);
if (AppDomain.CurrentDomain.IsDefaultAppDomain()) {
Console.WriteLine("主应用程序域");
}
//自己写个一个应用程序域//创建一个应用程序域
AppDomainSetup setup = new AppDomainSetup();
setup.LoaderOptimization = LoaderOptimization.SingleDomain;
AppDomain appDomain = AppDomain.CreateDomain("MultThread", null, setup);
appDomain.ExecuteAssembly("MultThread.exe");
线程
Thread Mainthread = Thread.CurrentThread;
Console.WriteLine("主线程id是:{0}", Mainthread.ManagedThreadId);
//创建一个线程
ThreadStart start = DoWork;
Thread thread = new Thread(start);
thread.Name = "first";
//线程的级别:微软对windows 0-31级别,级别是动态的,操作系统只做参考
thread.Priority = ThreadPriority.Normal;
//设置后台线程:主线程关闭了,子线程也关闭
//前台线程:主线程关了, 子线程还在跑着
thread.IsBackground = true;
//启动线程(不是真正启动,告诉CPU可以启动)
thread.Start();
while (true)
{
Console.WriteLine("主线程跑起:{0}", Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(1000);
//thread.Abort(thread);//终止线程
}
带参数的线程
Thread thread = new Thread((a) => {Console.WriteLine("参数{0},{1}", a, Thread.CurrentThread.ManagedThreadId); });
Thread thread = new Thread((a) => DoWork(a));
thread.IsBackground = true;
thread.Start(2);
Demo异步委托
class Program
{
public delegate void AddDel();
static void Main(string[] args)
{ AddDel aa = DoWork;
AddDel addDemo = new AddDel(aa);
addDemo.BeginInvoke(null, null);
Console.ReadKey();
}
static void DoWork()
{
while (true)
{
Console.WriteLine("子线程跑起:{0}",Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(1000);
}
//Console.WriteLine("子线程跑起:{0}",Thread.CurrentThread.ManagedThreadId);
}
}
Demo摇号机
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace 摇号机
{
public partial class Form1 : Form
{
List<Label> list = new List<Label>();
public bool IsCreate = false;
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
private void Form1_Load(object sender, EventArgs e)
{
list.Add(this.label1); list.Add(this.label2); list.Add(this.label3);
list.Add(this.label4);list.Add(this.label5);list.Add(this.label6);
}
private void btnStart_Click(object sender, EventArgs e)
{
if (IsCreate)
{
IsCreate = false;
btnStart.Text = "开始";
}
else
{
this.btnStart.Text = "结束";
IsCreate = true;
//启动一个线程 改变值
ThreadStart start = workRandom;
Thread thread = new Thread(start);
thread.IsBackground = true;
thread.Start();
}
}
public void workRandom()
{
Random random = new Random();
while (IsCreate)
{
for (int i = 0; i < 6; i++)
{
list[i].Text = random.Next(0, 10).ToString();
}
Thread.Sleep(100);
}
}
}
}