又来到了总结知识的时间了,今天又学了一些新的知识,是多线程和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. Linux 如何打开端口

    举例: 开放10000端口的解决步骤如下: 1.修改/etc/sysconfig/iptables文件,增加如下一行: -A RH-Firewall-1-INPUT -m state --state ...

  2. sql server 2012 镜像和出现的问题

    镜像安装的环境: 主机:win server 2012 , sql server 2012 ,ip:192.168.1.189  PC账户:administrator 备机:win server 20 ...

  3. LNMP : 502 Bad Gateway 解决小记,真正的原因

    站点搬迁到新的server.原先一直都是LAMP.如今改为LNMP. 将重写文件 htaccess改成 nginx的 conf.放到了站点.可仅仅能打开首页,其它重写页面一打开都是不停的载入. 载入等 ...

  4. springMvc 支持hibernate validator

    SpringMVC 支持Hibernate Validator 发表于9个月前(2014-08-04 11:34)   阅读(1780) | 评论(0) 11人收藏此文章, 我要收藏 赞0 5月23日 ...

  5. CentOS配置ftp服务器

    1.首先更新yum 源 yum update 2. 安装vsftpd yum install vsftpd -y   // 安装    移除是 yum remove vsftpd 3. 配置Vsftp ...

  6. [学习笔记]viewport定义,弹性布局,响应式布局

    一,移动端宽度设置viewport视图窗口,<meta name="viewport" content="width=device-width,initial-sc ...

  7. 2048小游戏(C语言版)

    #include <climits> #include <cstdio> #include <cstring> #include <stack> #in ...

  8. Win10下Genymotion无法正常使用的解决方法

    原Win7下安装配置的genymotion正常使用,Eclipse的Genymotion插件也可以正常运行.系统升级后,忽然就不work了. 折腾了一天试了各种方式,网上的例子也五花八门.最后还是找到 ...

  9. Replace不区分大小写

    private string ReplaceNoCase(string text, string oldValue, string newValue) { return System.Text.Reg ...

  10. 53个Oracle语句优化规则详解(转)

    Oracle sql 性能优化调整  1. 选用适合的ORACLE优化器        ORACLE的优化器共有3种:a. RULE (基于规则)   b. COST (基于成本) c. CHOOSE ...