C#窗体 WinForm 进程,线程
一、进程
进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。
它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。
Process 类,用来操作进程。
命名空间:using System.Diagnostics;
Process.Start("calc"); //打开计算器
Process.Start("mspaint"); //打开画图
Process.Start("iexplore" , "http://www.baidu.com"); //打开浏览器并指定地址
(一)通过一个进程,打开指定的文件:
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 psf = new ProcessStartInfo(path);
//设置该进程的执行信息
p.StartInfo = psf;
//启动进程
p.Start();
}
}
例子:注销
//这个path就是你要调用的exe程序的绝对路径
string path = Application.StartupPath;
//获取自身exe或dll的文件名路径
string s = 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();
}
例:窗口实现鼠标拖动
private int x;
private int y; private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
//鼠标点击时的XY坐标
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);
}
}
二、线程
线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。
区别:进程有自己独立的资源,线程共用资源。
Thread类, 命名空间:using System.Threading ;
程序默认只有一个主线程,如果做复杂处理,则会出现假死状态,因为一条线程同时只能做一件事。
多线程的作用:同时做多件事情,节约时间,后台运行程序,提高程序的运行效率,也不会使主界面出现无响应的情况。
创建线程:
开启新的线程执行哪个函数
Thread th = new Thread( 里面写线程要操作的方法,方法名不含括号 );
标记这个线程准备就绪了,可以随时执行,CPU决定执行时间
th.Start();
线程分为两种:
前台线程 - 只有所有的前台线程都关闭才能完成程序关闭。
后台线程 - 只要所有的前台线程都结束,后台线程则会自动结束。
两者的区别:应用程序必须运行完所有的前台线程才可以退出;
而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。
设置th线程为后台线程
th . IsBackground = true ;
控件由主线程创建,新线程想要访问主线程资源,程序默认是不允许跨线程访问的。
取消跨线程访问限制
在界面Load事件里
Control.CheckForIllegalCrossThreadCalls = false;
FormClosing 事件中:
//判断新线程是否为null,如果为null,那就自动关闭了
if(th != null)
{
//立即结束线程,但是结束后就不能再被重新Start了
th.Abort();
}
执行带参数的函数:
如果线程执行的方法需要参数,那么要求这个参数必须是object类型!
Thread th = new Thread(Test); //参数名不需要带括号
th . IsBackground = true;
th.Start("123"); //在这里传入Test函数所需要的参数
这样函数中就需要强转:
private void Test (object s)
{
string ss = (string) s ;
......
}
C#窗体 WinForm 进程,线程的更多相关文章
- WinForm进程 线程
进程主要调用另一程序,线程 分配工作. 一.进程: 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动.它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体.Process 类,用来操 ...
- winform进程、线程、TreeView递归加载
进程: 一般来说,一个程序就是一个进程,不过也有一个程序需要多个进程支持的情况. 进程所使用的类:Process 所需命名空间:System.Diagnostics; 可以通过进行来开启计算机上现有的 ...
- Winform进程、线程
进程: 一般来说,一个程序就是一个进程,不过也有一个程序需要多个进程支持的情况. 进程要使用的类是:Process它在命名空间:System.Diagnostics; 1.静态方法Start(); 2 ...
- [WinForm]WinForm跨线程UI操作常用控件类大全
前言 在C#开发的WinForm窗体程序开发的时候,经常会使用多线程处理一些比较耗时之类的操作.不过会有一个问题:就是涉及到跨线程操作UI元素. 相信才开始接触的人一定会遇上这个问题. 为了解决这个问 ...
- 编写高质量代码改善C#程序的157个建议——建议87:区分WPF和WinForm的线程模型
建议87:区分WPF和WinForm的线程模型 WPF和WinForm窗体应用程序都有一个要求,那就是UI元素(如Button.TextBox等)必须由创建它的那个线程进行更新.WinForm在这方面 ...
- python学习笔记-进程线程
1.什么是进程(process)? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述 ...
- 获取系统中所有进程&线程信息
读书笔记--[计算机病毒解密与对抗] 目录: 遍历进程&线程程序 终止进程 获取进程信息 获取进程内模块信息 获取进程命令行参数 代码运行环境:Win7 x64 VS2012 Update3 ...
- [skill] 进程 线程
在业务逻辑上: 进程线程没有区别. 在系统资源上: 进程拥有自己的地址空间.线程拥有自己的堆栈和临时变量,与其他线程共享地址空间. 在通信代价上: 线程间通信代价更低,实现更方便.进程通信相对开销比较 ...
- pyhon——进程线程、与协程基础概述
一直以来写博客都是实用主义者,只写用法,没信心写原理,但是每一次写作业的过程都有一种掘地三尺的感觉,终于,写博客困难症重症患者经历了漫长的思想斗争,还是决定把从网上淘到的各种杂货和自己的总结放在一起, ...
随机推荐
- background-clip,background-origin
开门见山,简单来说 background-origin定义了background的绘制区域(就是从什么地方开始绘制),三个属性 padding-box 背景图像相对于内边距框来绘制border-box ...
- sdutoj 2606 Rubik’s cube
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2606 Rubik’s cube Time Li ...
- Android近场通信---高级NFC(二)
读写NFC标签 读写NFC标签,要涉及到从Intent对象中获取标签,并要打开与标签的通信.要读写NFC标签数据,你必须要定义自己的协议栈.但是,要记住在直接使用NFC标签工作时,你依然能够读写NDE ...
- C++之路进阶——bzoj2879(美食节)
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1304 Solved: 702[Submit][Status] ...
- 看门外汉如何实现:C#操作 MongoDB基本CURD的事务控制
第一部分 基本设计 目前最新版本的C#驱动MongoDB-CSharpDriver-2.2.3,比之前的版本更新比较大,在网上很难找到这个版本的相关C#操作资料,以下都是个人自发研究.测试的,如有雷同 ...
- python实现动态更新远程机器列表的SSH登录脚本
在公司里, 常常要远程到很多机器上执行命令.机器列表会逐渐增多, 记忆这么多机器的IP或域名显然不是人脑所擅长的.因此, 需要保持一份SSH机器列表,从这些机器列表生成一个用于SSH到机器列表中机器的 ...
- Web服务端软件的服务品质概要
软件品质概述 提供同样功能.产品和服务的服务者中, 竞争力来自功能的多样化和服务品质的差异化, 无论是个体.企业还是国家. 这里的服务指功能.产品的实现程度和处理能力,以及研发/客服提供的技术支持程度 ...
- 基于ubuntu-2.6.35内核的SDIO-WiFi驱动移植
一.移植环境: 1.主机:Ubuntu 10.10发行版 2.目标机:FS_S5PC100平台 3.交叉编译工具:arm-cortex_a8-linux-gn ...
- js遍历数组的错误方法
for (var index in myArray) { // don't actually do this console.log(myArray[index]); } 缺点: 数组的索引值inde ...
- border:0; VS border:none;
border:none与border:0的区别体现为两点:一是理论上的性能差异,二是浏览器兼容性的差异. 性能差异: [border:0;]把border设为“0”像素效果等于border-width ...