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

一、进程:

进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。
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. Dispatch Queues and Thread Safety

    Dispatch Queues and Thread Safety It might seem odd to talk about thread safety in the context of di ...

  2. node jsonwebtoken

     jsonwebtoken是node版本的JWT(JSON Web Tokens)的实现.1.什么是JWT?Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于J ...

  3. 团体程序设计天梯赛-练习集-L1-033. 出生年

    L1-033. 出生年 以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份.”也就是说,直到2013年才达到“4个数字都不相同”的要求.本题请你根据要求,自动填充“ ...

  4. tomcat8版本实现虚拟主机

    vim /etc/hosts192.168.30.21   www.crushlinux.com192.168.30.21   www.cloud.com [root@localhost ~]# cd ...

  5. eas之获取各模块系统状态信息

    public void getSystemStatue() throws EASBizException, BOSException    {        CompanyOrgUnitInfo co ...

  6. 纯CSS 3D翻转一个面(翻转导航菜单 立方体)

    在做练习的时候学到css的翻转导航菜单,原代码有点让人头疼,通过对其css的参数一点点研究了其实现过程. 这里推荐大家研究这个3D翻转动画的代码. 我的github:swarz,欢迎给老弟我++星星 ...

  7. python中字节与字符串的转换

    #bytes object    byte = b"byte example"     # str object    str = "str example" ...

  8. CSS学习笔记之CSS3新特性

    目录 1.边框 2.背景 3.文本 4.字体 5.转换 6.过渡 7.动画 8.多列 9.自定义尺寸 CSS 用于控制网页的样式和布局,而 CSS3 是最新的 CSS 标准,这篇文章将着重介绍 CSS ...

  9. 继续聊WPF——如何获取ListView中选中的项

    在WPF中获Listview中选中的项,与WinForm里面有着很大的区别,要亲身去研究一下在WPF中如果处理,其实也不难,来,下面我们一起来通过一个简单的示例来感悟一下吧. 第一步就是建立一个WPF ...

  10. 2018ICPC南京

    可能上一次秦皇岛拿了银,有了偶像包袱? 打的时候感觉状态不是很好. 第一题,让你每次将连续一段区间的石头都拿掉.. 然后让你做个博弈. 橘子一顿分析,认为k+1的倍数都是输. 这时,我们以及默认i+1 ...