音效素材网提供各类素材,打造精品素材网站!

站内导航 站长工具 投稿中心 手机访问

音效素材

深入浅析WinForm 进程、线程及区别介绍
日期:2021-09-07 22:20:41   来源:脚本之家

一、进程

进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。

它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。

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 ;
    ......
  }

以上所述是小编给大家介绍的WinForm 进程、线程及区别介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

    您感兴趣的教程

    在docker中安装mysql详解

    本篇文章主要介绍了在docker中安装mysql详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编...

    详解 安装 docker mysql

    win10中文输入法仅在桌面显示怎么办?

    win10中文输入法仅在桌面显示怎么办?

    win10系统使用搜狗,QQ输入法只有在显示桌面的时候才出来,在使用其他程序输入框里面却只能输入字母数字,win10中...

    win10 中文输入法

    一分钟掌握linux系统目录结构

    这篇文章主要介绍了linux系统目录结构,通过结构图和多张表格了解linux系统目录结构,感兴趣的小伙伴们可以参考一...

    结构 目录 系统 linux

    PHP程序员玩转Linux系列 Linux和Windows安装

    这篇文章主要为大家详细介绍了PHP程序员玩转Linux系列文章,Linux和Windows安装nginx教程,具有一定的参考价值,感兴趣...

    玩转 程序员 安装 系列 PHP

    win10怎么安装杜比音效Doby V4.1 win10安装杜

    第四代杜比®家庭影院®技术包含了一整套协同工作的技术,让PC 发出清晰的环绕声同时第四代杜比家庭影院技术...

    win10杜比音效

    纯CSS实现iOS风格打开关闭选择框功能

    这篇文章主要介绍了纯CSS实现iOS风格打开关闭选择框,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作...

    css ios c

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的办法

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的

    Win7给电脑C盘扩容的办法大家知道吗?当系统分区C盘空间不足时,就需要给它扩容了,如果不管,C盘没有足够的空间...

    Win7 C盘 扩容

    百度推广竞品词的投放策略

    SEM是基于关键词搜索的营销活动。作为推广人员,我们所做的工作,就是打理成千上万的关键词,关注它们的质量度...

    百度推广 竞品词

    Visual Studio Code(vscode) git的使用教程

    这篇文章主要介绍了详解Visual Studio Code(vscode) git的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...

    教程 Studio Visual Code git

    七牛云储存创始人分享七牛的创立故事与

    这篇文章主要介绍了七牛云储存创始人分享七牛的创立故事与对Go语言的应用,七牛选用Go语言这门新兴的编程语言进行...

    七牛 Go语言

    Win10预览版Mobile 10547即将发布 9月19日上午

    微软副总裁Gabriel Aul的Twitter透露了 Win10 Mobile预览版10536即将发布,他表示该版本已进入内部慢速版阶段,发布时间目...

    Win10 预览版

    HTML标签meta总结,HTML5 head meta 属性整理

    移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析HTML代码,更好地将移动web前端页面表现出来...

    移动端html5模拟长按事件的实现方法

    这篇文章主要介绍了移动端html5模拟长按事件的实现方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家...

    移动端 html5 长按

    HTML常用meta大全(推荐)

    这篇文章主要介绍了HTML常用meta大全(推荐),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    cdr怎么把图片转换成位图? cdr图片转换为位图的教程

    cdr怎么把图片转换成位图? cdr图片转换为

    cdr怎么把图片转换成位图?cdr中插入的图片想要转换成位图,该怎么转换呢?下面我们就来看看cdr图片转换为位图的...

    cdr 图片 位图

    win10系统怎么录屏?win10系统自带录屏详细教程

    win10系统怎么录屏?win10系统自带录屏详细

    当我们是使用win10系统的时候,想要录制电脑上的画面,这时候有人会想到下个第三方软件,其实可以用电脑上的自带...

    win10 系统自带录屏 详细教程

    + 更多教程 +
    ASP编程JSP编程PHP编程.NET编程python编程