又来到了总结知识的时间了,今天又学了一些新的知识,是多线程和GDI的一些运用。

理论:

在学习多线程之前,首先要了解一下什么是进程?

进程:(关键字Process)进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,

        也是基本的执行单元。简单来说,就是计算机开启的一个正在运行的软件,是一段程序的执行过程。操作系统上包含N个进程。一个进程包含多个线程.

线程:(关键字Thread)线程是程序中一个单一的顺序控制流程,在一个进程里面开辟多个功能来同时执行多个任务。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身

前台线程:UI界面使用的是系统给我们默认的前台线程        前台线程终止后,后台线程不会终止。

后台线程:指的是我们自定义的线程对象                           后台线程终止后,前台线程将会结束。

多线程:   在单个程序中同时运行多个线程完成不同的工作成为多线程。
 
GDI:   图形设备接口(GDI:Graphics Device Interface)是Windows的子系统,它负责在视讯显示器和打印机上显示图形。

 

实操:

进程(在控制台下)

class Program
{
static void Main(string[] args)
{ Process[] proce = Process.GetProcesses(); //获取操作系统上的所有进程 foreach (var item in proce)
{
item.Kill(); //停止关联的进程(慎用) Console.WriteLine(item); }
Process.Start("devenv"); //打开一个进程
Process p1 = new Process(); //实例化一个进程
ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\system32\calc.exe"); //打开计算器进程的路径
p1.StartInfo = info;
p1.Start(); //打开 }
}
}

 线程:在Form窗体下

设计界面

主要代码:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} bool b = false;
Thread th = null; //引入命名空间 private void button1_Click(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false; //是否跨线程 if (!b) {
this.button1.Text = "终止"; b = true; th = new Thread(Bgian); th.Start(); //开始 } else
{
this.button1.Text = "抽奖";
b = false;
th.Abort(); //终止线程
} } public void Bgian() { //让三个label控件循环获取1--10的随机数
Random r = new Random();
while (true)
{ label1.Text = r.Next(1,10). ToString();
label2.Text = r.Next(1, 10).ToString();
label3.Text = r.Next(1, 10).ToString(); } }
}

运行结果

单击”抽奖“按钮后出现的界面

单击”终止“按钮出现的界面:

GDI画图(直线)

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics(); //引进命名空间using System.Drawing; Pen p = new Pen(Brushes.Red); //Pen定义用于绘制直线和曲线的对象 Brushes所有标准颜色的画笔 g.DrawLine(p,new Point(100,100),new Point (300,100)); //只能画一条线 Point[] points = { new Point(150, 200), new Point(250, 200), new Point(100, 300), new Point(300, 300) };//定义个Point数组来画多条线
g.DrawLines(p, points); }

简单提一下序列化:序列化就是将类以二进制的形式保存在硬盘上。关键字是:BinaryFormater。定义一个序列化是: BinaryFormatter binary = new BinaryFormatter();

好了,今天就先写到这里了。下周在继续吧。加油!

 

C#多线程及GDI(Day 23)的更多相关文章

  1. JavaSE_ 多线程 总目录(23~24)

    JavaSE学习总结第23天_多线程123.01 多线程程序的引入23.02 进程概述及多进程的意义23.03 线程概述及多线程的意义23.04 并行和并发的区别23.05 Java程序运行原理和JV ...

  2. 多线程的学习与GDI的学习

    今天又是一周的周五,感觉过的好快,我感觉不是期盼周末的到来,而是感觉现在已经习惯啦每天坐在这里敲代码,其实我是一个性格非常开朗的女生,现在不知道为什么感觉默默地坐在自己位置上面敲代码成为了我习以为常的 ...

  3. Java基础】并发 - 多线程

    Java基础]并发 - 多线程 分类: Java2014-05-03 23:56 275人阅读 评论(0) 收藏 举报 Java   目录(?)[+]   介绍 Java多线程 多线程任务执行 大多数 ...

  4. Android - Android 面试题集

    1.Java部分 1.1 操作系统相关 1.什么是操作系统? 2.什么是线程,什么是进程? 1.2 JDK&JVM&JRE 1.JDK & JVM & JRE分别是什么 ...

  5. 大学四年,总结一套适合小白的Java自学路线和方法

    前言篇 大家好,我是bigsai 好久不见,甚是想念,文章同时收录在回车课堂(文底阅读原文可达). 无论你是大学生还是在职人员,想学Java时,都会面临两个选择,自学或者报班.报班通常太费钱,时间又不 ...

  6. QT软件工程师招聘市场需求报告

    QT软件工程师招聘市场需求报告 目录 最流行的编程语言排行榜 QT软件工程师职位需求 QT软件工程师薪资待遇 QT软件工程师行业需求 QT软件工程师QT技术需求 QT软件工程师基础技术需求 QT软件工 ...

  7. .net学习之多线程、线程死锁、线程通信 生产者消费者模式、委托的简单使用、GDI(图形设计接口)常用的方法

    1.多线程简单使用(1)进程是不执行代码的,执行代码的是线程,一个进程默认有一个线程(2)线程默认情况下都是前台线程,要所有的前台线程退出以后程序才会退出,进程里默认的线程我们叫做主线程或者叫做UI线 ...

  8. JavaSE学习总结第23天_多线程1

      23.01  多线程程序的引入 如果一个程序只有一个执行流程,所以这样的程序就是单线程程序. 如果一个程序有多条执行流程,那么,该程序就是多线程程序. 23.02  进程概述及多进程的意义 要想说 ...

  9. java 多线程 23 : Timer

    前言 定时/计划功能在Java应用的各个领域都使用得非常多,比方说Web层面,可能一个项目要定时采集话单.定时更新某些缓存.定时清理一批不活跃用户等等.定时计划任务功能在Java中主要使用的就是Tim ...

随机推荐

  1. Get Intellisense for .axml files in Visual Studio

    原文Get Intellisense for .axml files in Visual Studio So in order to get some intellisense support for ...

  2. poj 3273 Monthly Expense (二分搜索,最小化最大值)

    题目:http://poj.org/problem?id=3273 思路:通过定义一个函数bool can(int mid):=划分后最大段和小于等于mid(即划分后所有段和都小于等于mid) 这样我 ...

  3. Loading Image

    Android doesn’t handle animated gifs, but here’s one way to display an animated loading image that i ...

  4. 复习一下sql server的inner join left join 和right join

    1.left join sql语句如下: select * from A left join B  on A.aID = B.bID 结果如下:aID               aNum       ...

  5. Unity3D嵌入WPF教程

    Unity3D嵌入WPF教程 创建一个 类库工程 添加 WindowForm 用户控件 (UserControl) 1).引入 UntiyWebPlayer COM 组件 在工具->选择工具箱中 ...

  6. IO库 8.1

    题目:编写函数,接受一个istream&参数,返回值类型也是istream&.此函数须从给定流中读取数据,直到遇到文件结束标志时停止.它将读取的数据打印在标准输出上.完成这些操作后,在 ...

  7. PDO简介

    php链接数据库 半年后需要更换mysql为集群模式或者有钱了升级oracl数据库,这时的改动相当大,成本高.如果再之前使用PDO,之后再遇见这样的问题就很轻松. 开启PDO: 打开php.ini文件 ...

  8. codeforces 633G. Yash And Trees dfs序+线段树+bitset

    题目链接 G. Yash And Trees time limit per test 4 seconds memory limit per test 512 megabytes input stand ...

  9. Python3 关于UnicodeDecodeError/UnicodeEncodeError: ‘gbk’ codec can’t decode/encode bytes类似的文本编码问题

    以下是小白的爬虫学习历程中遇到并解决的一些困难,希望写出来给后来人,如有疏漏恳请大牛指正,不胜感谢! 首先,我的代码是这样的 import requests url = 'http://www.acf ...

  10. spring util命名空间

    在spring的配置文件中util命名空间类似于java.util包类对应,util命名空间提供了集合相关的配置,在使用命名空间前要导入util命名空间,如下: util命名空间引入 <bean ...