• 进程与线程


    进程:
    进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。
    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(); //开始进程

    通过文件选择框让用户自己选择所需要打开的程序并打开:
    //设置要打开的文件类型
    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();
    }
    -----------------------------------------------------------------------------------------------
    例子:注销
    //string path = Application.StartupPath;//这个path就是你要调用的exe程序的绝对路径

    //获取自身exe或dll的文件名路径
    string s = System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName;

    //创建进程
    Process p = new Process();
    //设置进程启动信息
    ProcessStartInfo ps = new ProcessStartInfo(s);
    p.StartInfo = ps;
    //启动进程
    p.Start();
    //关闭当前程序
    this.Close();
    ----------------------------------------------------------------------------------------------
    //实现鼠标拖动
    int x;
    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);
    }
    }
    ----------------------------------------------------------------------------------------------
    线程:
    线程,有时被称为轻量级进程(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 ;
    ......
    }

  • 相关阅读:
    完美对接海康、大华、华为等等设备的Onvif/RTSP流媒体服务全终端无插件直播-本地安装启动
    LiveQing高性能RTMP流媒体服务器软件-支持直播、云端录像存储
    LiveQing全新升级的RTMP流媒体服务器支持HLS(m3u8)、RTMP、HTTP-FLV高性能分发
    LiveQing高性能RTMP、FLV、HLS流媒体服务器软件-支持与企业MySQL数据库对接
    视频平台、NVR、摄像头通过GB28181接入实现WEB分屏播放以及大屏展示
    视频流媒体服务WEB播放器集成使用
    GB28181平台实现,支持摄像头公网WEB端直播
    GB28181平台安装部署过程
    element-UI之form表单数字值的校验
    element-UI之表单校验ref标签
  • 原文地址:https://www.cnblogs.com/shi2172843/p/5848109.html
Copyright © 2020-2023  润新知