C#多线程及GDI(Day 23)

   又来到了总结知识的时间了,今天又学了一些新的知识,是多线程和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();

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

时间: 2024-10-01 00:03:22

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

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

黑马程序员_JavaSE学习总结第23天_多线程123.01 多线程程序的引入23.02 进程概述及多进程的意义23.03 线程概述及多线程的意义23.04 并行和并发的区别23.05 Java程序运行原理和JVM的启动是多线程的吗23.06 实现多线程及多线程方式1的思路23.07 多线程方式1的代码实现23.08 获取和设置线程对象名称23.09 线程调度及获取和设置线程优先级23.10 线程控制之休眠线程23.11 线程控制之加入线程23.12 线程控制之礼让线程23.13 线程控制之守护

多线程的学习与GDI的学习

今天又是一周的周五,感觉过的好快,我感觉不是期盼周末的到来,而是感觉现在已经习惯啦每天坐在这里敲代码,其实我是一个性格非常开朗的女生,现在不知道为什么感觉默默地坐在自己位置上面敲代码成为了我习以为常的事情,虽然也有不想这样子的事情,但是我感觉我还要掌握好多啊,现在只是刚开始,跟着老师讲课的步伐慢慢的在前进,可是太多知识的掌握还是依赖于自己的领悟,现在就是感觉太多不懂的知识,是不是开始焦虑我不知道啦,不过我会努力啦.嘿嘿,今天我们学习啦多线程和GDI,下面就总结一下. 一.多线程 在学习多线程前我

Java基础】并发 - 多线程

Java基础]并发 - 多线程 分类: Java2014-05-03 23:56 275人阅读 评论(0) 收藏 举报 Java 目录(?)[+] 介绍 Java多线程 多线程任务执行 大多数并发应用程序时围绕执行任务(task)进行管理的:所谓任务就是抽象的,离散的工作单元. 围绕执行任务来管理应用程序时,第一步是要指明一个清晰的任务边界.大多数应用服务器程序都选择了下面这个自然的任务辩解:单独的客户请求: 任务时逻辑上的单元: 任务 Runnable 表示一个任务单元(java.lang)

Java入门——多线程(一)

Java入门——多线程(一) 进程与线程的区别 进程是程序的一次动态的执行的过程,需要经历从代码的加载,代码执行到执行完毕的一个完整过程,这个过程也是进程重产生,发展到最终消亡的过程.多进程操作系统利用CPU的分时机制,分时段执行不同程序,由于CPU运行速度非常快,所以就想是多个进程同时运行一样. 线程是比进程更小的执行单位,线程在进程的基础之上进行的进一步划分.所谓多线程是指在一个进程在执行过程中可以产生多个更小的程序单元,这些更小的单元成为线程,可以同时存在,同时运行. 所谓的线程是程序的运

mysql AB 的基本搭建

Mysql的AB复制 实验环境 Master 172.25.23.4 Slave1 172.25.23.5 Slave2 172.25.23.6 Selinux iptables disabled 加解析 注意:mysql的AB复制,master和slave的数据库版本要么一样,要么slave的版本高于master Mysql 5.1 一.Mysql 的AB 复制 MASTER 1.安装软件 yum install -y mysql-server 2.修改配置文件,启动服务 (1)初始化数据库

Android企业级应用程序开发完整训练:精通Android商业级开发最佳实践的24堂课

从企业级商业实战的角度入手,24小时内通过23个动手实战案例,循序渐进的对Android商业级别的应用程序开发要点各个击破,依托于在多年的Android(6款完整的硬件产品和超过20款应用软件)开发和企业级培训经验(超过150期的次Android的企业内训和公开课),旨在在实务的基础之上帮助你完成任何复杂程序的高质量Android应用程序开发,让Android开发跟上想象的速度.最后,通过ActivityManagerService揭秘Android应用程序一切行为背后的核心根源,让你从此开发应

关于文件的切割下载

1 public class Program 2 { 3 public static CountdownEvent cde = new CountdownEvent(0); 4 5 //每个线程下载的字节数,方便最后合并 6 public static ConcurrentDictionary<long, byte[]> dic = new ConcurrentDictionary<long, byte[]>(); 7 8 //请求文件 9 public static string

关于select的困惑

首先,我知道select是IO复用.以UDP为例,select流程大体如下: 1 for(;;) { 2 //通过FD_SET告诉内核你感兴趣的fd 3 fd_set read_fds; 4 FD_CLEAR(&read_fds); 5 FD_SET(fd[0],&read_fds); 6 ... 7 FD_SET(fd[n-1],&read_fds); 8 int maxfdp1 = max(fd[0],...,fd[n-1]) + 1; //获取最大的fd+1 9 10 //s

Android - Android 面试题集

1.Java部分 1.1 操作系统相关 1.什么是操作系统? 2.什么是线程,什么是进程? 1.2 JDK&JVM&JRE 1.JDK & JVM & JRE分别是什么以及它们的区别? 2.解释一下为什么Java可以跨平台? 1.3 面向过程 & 面向对象 1.什么是面向过程 & 什么是面向对象 & 区别? 2.给我说说Java面向对象的特征以及讲讲你代码中凸显这些特征的经验. 3.什么是重载 & 什么是重写 & 区别. 4.谈谈你对