• 进程和线程


    一、进程 Pcocess  

      引用命名空间:using System.Diagnostics;

    步骤:

     Process p = new Process();//实例化
     ProcessStartInfo psi = new ProcessStartInfo(openFileDialog1.FileName);//获取要打开的文件的路径对象
     p.StartInfo = psi;//把文件路径给进程
     p.Start();//开启进程。不是立刻执行,要根据CPU的实际占有情况

    二、线程

    1 进程是主线程,线程去执行一段需要时间的代码,主线程不会被占用,程序就 不会出现假死状态了。

    2 线程所在的命名空间:System.Threading;

    3 Thread th = new Thread(方法名);    没有不要参数的构造函数,常用的为,1个参数,参数类型是委托类型,需要一个方法指向

    4 程序默认不允许跨线程访问对象,关闭监控就可以了。构造函数中 Control.CheckForIllegalCrossThreadCalls = false;

    5 程序默认所有的线程都为:前台线程 。将新开的线程变为后台线程:th.IsBackground = true;

    6 停止线程:th.Abort();

    7 实例

          建立一个按钮,让他在“输出”里面执行三秒,点击按钮后,按钮失效,三秒后恢复使用。并且关闭窗体时,程序完全退出。

          实例分析:

                  按按钮,失效,三秒后恢复:Button.Enable。这里面有一个线程传值。

                  关闭窗体时,程序完全退出:此线程是否为“前台线程”。

                  子线程不能动用主线程部件,于是需要修改CheckForIllegalCrossThreadCalls的属性

    方法:

    .创建窗体,只有一个Button。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication4
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
                Control.CheckForIllegalCrossThreadCalls = false;//程序默认不允许跨线程访问对象.设置为false就没事了。通俗点,关闭监控就可以了。
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Thread th = new Thread(aaa);//新建线程th。在th里面委托方法aaa,不用加()。
                th.Start(button1);//把Button传到aaa(object b)方法中..
                th.IsBackground = true;//程序默认所有的线程都为前台线程(即窗体关闭了,如果进程还未完事,此时进程还未完全关闭,直至任务完成)。设置成true时,窗体关闭了,线程就完全关闭了。
                button1.Enabled = false;
            }
    
            private static void aaa(object b)//用线程执行方法,只能传一个参数,并且此参数必须是object类型。
            {
                for (int i = 0; i < 3; i++)
                {
                    Console.WriteLine(i);
                    System.Threading.Thread.Sleep(1000);
                }
                ((Button)b).Enabled = true;
            }
        }
    }

    完!!

  • 相关阅读:
    从网络通信角度谈web性能优化
    JavaScript对象的深浅复制
    Ajax原理、优缺点及应用场景
    细谈sass和less中的变量及其作用域
    动态样式语言—LESS
    js中创建对象的几种方式
    Node学习笔记---初识Node
    "一不小心就火了"团队采访
    部门管理系统需求规格说明书
    java利用iTextWorker生成pdf
  • 原文地址:https://www.cnblogs.com/wwz-wwz/p/5914264.html
Copyright © 2020-2023  润新知