首页 > 编程 > .NET > 正文

深入浅析WinForm 进程、线程及区别介绍

2024-07-10 12:54:44
字体:
来源:转载
供稿:网友

进程是程序集合的运行活动,它具有独立函数,然而线程,有时称为轻量级进程,是程序执行流的其中之一,以下就让错新技术频道小编来为大家介绍深入浅析WinForm 进程、线程及区别介绍。

一、进程

命名空间: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 ;    ......  }

以上就是错新技术频道小编带给大家的深入浅析WinForm 进程、线程及区别介绍,感谢大家的阅读,如果觉得这篇文章对你有帮助的话,可以分享给大家哦。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表