C#-WinForm-进程、线程
进程:一个程序就是一个进程,也有可能一个程序需要多个进程来支持的情况,比如QQ

点击按钮打开记事本,静态方法
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
//点击打开记事本
private void button1_Click(object sender, EventArgs e)
{
Process.Start("notepad");
}
}
点击打开记事本
引用新的命名空间:using System.Diagnostics; 新的类:Process;(李献策lxc)
==================================================
如何制作一个打开应用程序的程序?也可以实例化对象,来调用Start()普通方法
但调用普通方法之前,需要给StartInfo属性设置一个对象,来通知他要打开哪个进程(李献策lxc)

public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
//选择应用程序
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "应用程序|*.exe"; DialogResult dr = openFileDialog1.ShowDialog();
if (dr == DialogResult.OK)
{
textBox1.Text = openFileDialog1.FileName;
}
}
//打开程序
private void button2_Click(object sender, EventArgs e)
{
Process p = new Process();//将Process实例化
ProcessStartInfo psi = new ProcessStartInfo(textBox1.Text);//指定运行程序的路径名称
p.StartInfo = psi;//接收路径
p.Start();//运行程序
}
}
运行选定的应用程序

=====================================================================
线程:
一个进程就像是一个公司,这个公司默认只有一个老板,老板叫做主线程,默认帮用户操作窗体,或者很快的其他操作
但如果执行长时间的操作,比如每隔一秒打印一个数字,此时主线程在执行循环,用户是无法操作窗体的
一个线程同一时间只能做一件事,程序一旦让他去执行一段需要时间的代码那么就会出现程序假死,失去控制
原因是:线程同一时间只能做一件事,而主线程是操作窗体控制的一旦被占用,那么窗体就没有人控制了(李献策lxc)
解决办法:
招一个员工帮老板干活
先把要执行的代码提取成一个方法,是一个完整的流程

点击按钮开始执行
public Form3()
{
InitializeComponent();
}
//点击执行
private void button1_Click(object sender, EventArgs e)
{
//创建一个线程对象,告诉他要执行的哪个方法
Thread t = new Thread(aaa);
//告诉他开始执行,不是立即开始,是cpu决定什么时候开始
t.Start();
}
//要执行的程序代码,提取成方法
private static void aaa()
{
for (int i = ; i < ; i++)
{
Console.WriteLine(i);
System.Threading.Thread.Sleep();
}
}
}
创建线程

可以同时创建多个线程(李献策lxc)
问题:每次点击一个线程都会执行一次代码,如果连续点击会重复执行相同代码,可以设计在线程执行时按钮不可用,执行完按钮变得可用
线程需要执行一个方法,而这个方法允许有一个参数,并且这个参数必须是object类型
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
//点击执行
private void button1_Click(object sender, EventArgs e)
{
//创建一个线程对象,告诉他要执行的哪个方法
Thread t = new Thread(aaa);
//告诉他开始执行,不是立即开始,是cpu决定什么时候开始
t.Start(sender);
(sender as Button).Enabled = false;
}
//要执行的程序代码,提取成方法
private static void aaa(object bbb)
{
for (int i = ; i < ; i++)
{
Console.WriteLine(i);
System.Threading.Thread.Sleep();
}
(bbb as Button).Enabled = true;
}
}

程序默认不允许跨线程访问对象,因为监控开着,需要关闭监控
创建的线程是无法访问主线程的内容、控件的,需要结构函数中改变属性值即可(李献策lxc)

线程默认开启为前台线程,程序必须将所有的前台线程执行完毕后才会真正退出程序
解决办法:将线程变为后台线程,主窗体一关,后台线程全部关闭(李献策lxc)

C#-WinForm-进程、线程的更多相关文章
- WinForm进程 线程
进程主要调用另一程序,线程 分配工作. 一.进程: 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动.它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体.Process 类,用来操 ...
- winform进程、线程、TreeView递归加载
进程: 一般来说,一个程序就是一个进程,不过也有一个程序需要多个进程支持的情况. 进程所使用的类:Process 所需命名空间:System.Diagnostics; 可以通过进行来开启计算机上现有的 ...
- Winform进程、线程
进程: 一般来说,一个程序就是一个进程,不过也有一个程序需要多个进程支持的情况. 进程要使用的类是:Process它在命名空间:System.Diagnostics; 1.静态方法Start(); 2 ...
- [WinForm]WinForm跨线程UI操作常用控件类大全
前言 在C#开发的WinForm窗体程序开发的时候,经常会使用多线程处理一些比较耗时之类的操作.不过会有一个问题:就是涉及到跨线程操作UI元素. 相信才开始接触的人一定会遇上这个问题. 为了解决这个问 ...
- python学习笔记-进程线程
1.什么是进程(process)? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述 ...
- 获取系统中所有进程&线程信息
读书笔记--[计算机病毒解密与对抗] 目录: 遍历进程&线程程序 终止进程 获取进程信息 获取进程内模块信息 获取进程命令行参数 代码运行环境:Win7 x64 VS2012 Update3 ...
- [skill] 进程 线程
在业务逻辑上: 进程线程没有区别. 在系统资源上: 进程拥有自己的地址空间.线程拥有自己的堆栈和临时变量,与其他线程共享地址空间. 在通信代价上: 线程间通信代价更低,实现更方便.进程通信相对开销比较 ...
- pyhon——进程线程、与协程基础概述
一直以来写博客都是实用主义者,只写用法,没信心写原理,但是每一次写作业的过程都有一种掘地三尺的感觉,终于,写博客困难症重症患者经历了漫长的思想斗争,还是决定把从网上淘到的各种杂货和自己的总结放在一起, ...
- android 进程/线程管理(一)----消息机制的框架
一:android 进程和线程 进程是程序运行的一个实例.android通过4大主件,弱化了进程的概念,尤其是在app层面,基本不需要关系进程间的通信等问题. 但是程序的本质没有变,尤其是多任务系统, ...
- android 进程/线程管理(二)----关于线程的迷思
一:进程和线程的由来 进程是计算机科技发展的过程的产物. 最早计算机发明出来,是为了解决数学计算而发明的.每解决一个问题,就要打纸带,也就是打点. 后来人们发现可以批量的设置命令,由计算机读取这些命令 ...
随机推荐
- HTML 学习笔记 CSS样式(链接)
我们能够以不同的方法为链接设置样式. 设置链接的样式 能够设置链接样式的 CSS 属性有很多种(例如 color, font-family, background 等等).链接的特殊性在于能够根据它们 ...
- LCT裸题泛做
①洞穴勘测 bzoj2049 题意:由若干个操作,每次加入/删除两点间的一条边,询问某两点是否连通.保证任意时刻图都是一个森林.(两点之间至多只有一条路径) 这就是个link+cut+find roo ...
- 苹果IOS开发者账号的区别,企业账号,个人账号,公司团队账号,教育账号
苹果IOS开发者账号总结 详细地址:https://developer.apple.com/programs/which-program/ 个人账号(Individual): 费用99美金一年, 该账 ...
- 截取视图某一段另存为部分视图(Partial View)
在做ASP.NET MVC后台管理程序时,根据程序需要,Isus.NET需要实现一个功能,就是动态截取视图某一段另存为部分视图Partial View. 思路为在视图中,使用jQury的程序截图以及P ...
- java:如何用代码控制H2 Database启动
1.纯手动start/stop package com.cnblogs.yjmyzz.h2; import java.sql.Connection; import java.sql.DriverMan ...
- PHP核心编程知识点
一.PHP基本语法 PHP标记:一共有四种,只推荐使用第一种 语句结束符:分号 注释:行注释(// #)和块注释(/* */),注释的规范 二.常见的输出语句 print echo var_du ...
- mvc5+ef6+Bootstrap 项目心得--身份验证和权限管理
1.mvc5+ef6+Bootstrap 项目心得--创立之初 2.mvc5+ef6+Bootstrap 项目心得--身份验证和权限管理 3.mvc5+ef6+Bootstrap 项目心得--WebG ...
- 对react的几点质疑
现在react.js如火如荼,非常火爆,昨天抽了一天来看了下这项技术.可能就看了一天,研究的不深入,但是我在看的过程中发现来了很多疑惑,这里拿出来和那家分享讨论以此共勉. 在我接触的前端以后,让我感觉 ...
- [转]史上最全的CSS hack方式一览
做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我们会极不情愿的使用这个不太友好的方式来达到大家要求的页面表现.我个人是不太推荐使用hack的,要知道 ...
- [Codevs1403]新三国争霸(MST+DP)
题目:http://codevs.cn/problem/1403/ 分析: 很容易想到对于某个确定的一天,就是求个最小生成树,又因为数据范围很小,所以可以暴力.但问题的关键是如果相邻两天的方案不同,就 ...