进程主要调用另一程序,线程 分配工作。

一、进程:

进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。
Process 类,用来操作进程。 命名空间:using System.Diagnostics;

一个程序只有一个进程

Process.Start("calc"); //计算器
Process.Start("mspaint"); //画图
Process.Start("iexplore" , "http://www.baidu.com");//打开浏览器并指定地址

1、通过一个进程,打开指定的文件

1.创建进程对象
Process p = new Process();
2.创建一个StartInfo对象,是指定带盘符的路径。
ProcessStartInfo psi = new ProcessStartInfo(@"C:\user\.....);
3.进程指定及开始
p.StartInfo = psi; //指定路径
p.Start(); //开始进程

通过文件选择框让用户自己选择所需要打开的程序并打开:

 private void button1_Click(object sender, EventArgs e)
{
//设置选择文件的类型
openFileDialog1.Filter = "应用程序|*.exe";
//显示对话框并且判断用户有没有选中文件
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
//取文件路径
string path = openFileDialog1.FileName;
//创建一个新的进程
Process p = new Process(); //造进程启动信息 路径
ProcessStartInfo ps=new ProcessStartInfo(path);
//设置进程需要执行的文件信息
p.StartInfo = ps;
//启动进程
p.Start();
//关闭进程
p.Kill();
}
}

列子:注销

string path=    System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName;  获取自身文件的路径 
 //注销
private void button2_Click(object sender, EventArgs e)
{
//打开该程序
//取该程序文件的路径
// string path = Application.StartupPath;
string path= System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName;
//造一个进程
Process p = new Process();
//造一个进程的启动信息
ProcessStartInfo ps = new ProcessStartInfo(path);
//设置进程启动信息
p.StartInfo = ps;
//启动进程
p.Start(); //关闭程序
this.Close();
} 需要调用别的程序,可以做一个进程

二、线程

线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。

区别:进程有自己独立的资源,线程共用资源。

Thread类, 命名空间:using System.Threading ;

程序默认只有一个主线程,如果做复杂处理,则会出现假死状态,因为一条线程同时只能做一件事。

多线程的作用:同时做多件事情,节约时间,后台运行程序,提高程序的运行效率,也不会使主界面出现无响应的情况。

同步:就只有一个线程  异步:多个线程(主要做这个)

程序出现假死就是 一个线程多用了

鼠标移动窗体
  //鼠标移动窗体   在picturebox里点击移动窗体         没有窗体边框也可移动     location(属性)
private int x;
private int y; private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
//鼠标按下执行的东西
x=e.X;
y = e.Y; } private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
//鼠标移动事件
if (e.Button == System.Windows.Forms.MouseButtons.Left)//判断鼠标按下的是左键
{
this.Left = this.Left + (e.X - x);
this.Top = this.Top + (e.Y - y);
}
}

创建线程:

开启新的线程执行哪个函数

创建线程:

开启新的线程执行哪个函数
  

  Thread th = new Thread( 里面写线程要操作的方法,方法名不含括号 );

标记这个线程准备就绪了,可以随时执行,CPU决定执行时间
  

  th.Start();

控件由主线程创建,新线程想要访问主线程资源,程序默认是不允许跨线程访问的。

取消跨线程访问限制
在界面Load事件里

  Control.CheckForIllegalCrossThreadCalls = false;

        private void button3_Click(object sender, EventArgs e)
{
//造一个线程
Thread th = new Thread(test);
//取消跨线程访问限制 在load里写 //执行线程
th.Start(); } //做一个方法 假死状态
private void test()
{
for (int i = ; i < ; i++)
{
richTextBox1.Text += i.ToString();
}
}

线程分为两种:

前台线程  -  只有所有的前台线程都关闭才能完成程序关闭。

后台线程  -  只要所有的前台线程都结束,后台线程则会自动结束。

两者的区别:应用程序必须运行完所有的前台线程才可以退出;

      而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。

设置th线程为后台线程  th . IsBackground = true ;

FormClosing 事件中:

  //判断新线程是否为null,如果为null,那就自动关闭了
  if(th != null)
  {
    //立即结束线程,但是结束后就不能再被重新Start了
    th.Abort(); 
  }

执行带参数的函数:

如果该方法是带参数的,并且是放在线程里面执行的,要求该方法的参数必须是object类型的

Thread th = new Thread(Test);   //参数名不需要带括号
  th . IsBackground = true;
  th.Start(2000); //在这里传入Test函数所需要的参数

这样函数中就需要强转:
  private void Test (object n)
  {

 int count=Convert.ToIn32(n);

     for (int i = 0; i < 3000; i++)
{
richTextBox1.Text += i.ToString();
}

    
  }

WinForm进程 线程的更多相关文章

  1. winform进程、线程、TreeView递归加载

    进程: 一般来说,一个程序就是一个进程,不过也有一个程序需要多个进程支持的情况. 进程所使用的类:Process 所需命名空间:System.Diagnostics; 可以通过进行来开启计算机上现有的 ...

  2. Winform进程、线程

    进程: 一般来说,一个程序就是一个进程,不过也有一个程序需要多个进程支持的情况. 进程要使用的类是:Process它在命名空间:System.Diagnostics; 1.静态方法Start(); 2 ...

  3. [WinForm]WinForm跨线程UI操作常用控件类大全

    前言 在C#开发的WinForm窗体程序开发的时候,经常会使用多线程处理一些比较耗时之类的操作.不过会有一个问题:就是涉及到跨线程操作UI元素. 相信才开始接触的人一定会遇上这个问题. 为了解决这个问 ...

  4. python学习笔记-进程线程

    1.什么是进程(process)? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述 ...

  5. 获取系统中所有进程&线程信息

    读书笔记--[计算机病毒解密与对抗] 目录: 遍历进程&线程程序 终止进程 获取进程信息 获取进程内模块信息 获取进程命令行参数 代码运行环境:Win7 x64 VS2012 Update3 ...

  6. [skill] 进程 线程

    在业务逻辑上: 进程线程没有区别. 在系统资源上: 进程拥有自己的地址空间.线程拥有自己的堆栈和临时变量,与其他线程共享地址空间. 在通信代价上: 线程间通信代价更低,实现更方便.进程通信相对开销比较 ...

  7. pyhon——进程线程、与协程基础概述

    一直以来写博客都是实用主义者,只写用法,没信心写原理,但是每一次写作业的过程都有一种掘地三尺的感觉,终于,写博客困难症重症患者经历了漫长的思想斗争,还是决定把从网上淘到的各种杂货和自己的总结放在一起, ...

  8. android 进程/线程管理(一)----消息机制的框架

    一:android 进程和线程 进程是程序运行的一个实例.android通过4大主件,弱化了进程的概念,尤其是在app层面,基本不需要关系进程间的通信等问题. 但是程序的本质没有变,尤其是多任务系统, ...

  9. android 进程/线程管理(二)----关于线程的迷思

    一:进程和线程的由来 进程是计算机科技发展的过程的产物. 最早计算机发明出来,是为了解决数学计算而发明的.每解决一个问题,就要打纸带,也就是打点. 后来人们发现可以批量的设置命令,由计算机读取这些命令 ...

随机推荐

  1. BZOJ 4999: This Problem Is Too Simple! DFS序+LCA+树状数组+离线

    Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) , ...

  2. Scrapy处理200-300范围之外的响应代码

    HttpErrorMiddleware 类scrapy.spidermiddlewares.httperror.HttpErrorMiddleware 过滤掉不成功(错误)的HTTP响应,以便蜘蛛不必 ...

  3. ADB 命令和monkey

    一.概要 1.什么是adb? adb全称为Android Debug Bridge,就是起到调试桥的作用.顾名思义,adb就是一个debug工具. 2.adb工作原理 不是很理解?那就来看看它的工作原 ...

  4. 深度学习应用在推荐系统的论文-----A Novel Deep Learning-Based Collaborative Filtering Model for Recommendation System

    1.题目:一种新的基于深度学习的协同过滤推荐系统 2.摘要: 以协同过滤(CF)为基础的模型主要获取用户和项目的交互或者相关性.然而,现有的基于CF的方法只能掌握单一类型的关系,如RBM,它只能获取用 ...

  5. 单行函数、表连接(day02)

    回顾: 1.数据库介绍 sql: dql: select dml: insert delete update ddl: create drop alter tcl: commit rollback s ...

  6. Windows10系统如何清除记录和关掉xbox录制

    在Windows的Xbox平台玩游戏时,总会发现以前玩过的许多游戏进度都保留着,麻烦的是白白的成就条让人感到相当的不爽,并且想删除还删不掉.某些当年一边玩一边录制的游戏,每当重新打开的时候都会弹出录制 ...

  7. 如何快速从数据库获取表属性编写JavaBean

    以前自己对子设计好的数据库将数据库中的表转换为JavaBean,自己还一个一个慢慢打效率真是低,还是老师比较聪明学习学习. 我用的数据库可视化工具是Navicat Premium.UltraEdit( ...

  8. 渗透实战(周四):CSRF跨站域请求伪造

    上图是广东外语外贸大学北校区内MBA中心旁边酒店房间的Wi-Fi网络环境,假设我们的Kali攻击机连入到SSID为414(房间号)的Wi-Fi网络,其IP地址:192.168.43.80 .同一Wi- ...

  9. String Boot-thymeleaf使用(四)

    简介 Thymeleaf是面向Web和独立环境的现代服务器端Java模板引擎,能够处理HTML,XML,JavaScript,CSS甚至纯文本.,可以完全替代jsp,也是spring boot官方推荐 ...

  10. codeforces 257B

    #include<stdio.h> #define mod 1000000007 int main() { __int64 n,m,i,j,k,x,y,z; while(scanf(&qu ...