zoukankan      html  css  js  c++  java
  • 进程和线程

    一、进程 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;
            }
        }
    }

    完!!

  • 相关阅读:
    BZOJ1299 [LLH邀请赛]巧克力棒
    BZOJ1046 [HAOI2007]上升序列
    BZOJ1798 [Ahoi2009]Seq 维护序列seq
    BZOJ2045 双亲数
    BZOJ2301 [HAOI2011]Problem b
    BZOJ1021 [SHOI2008]Debt 循环的债务
    BZOJ2618 [Cqoi2006]凸多边形
    BZOJ1069 [SCOI2007]最大土地面积
    BZOJ1051 [HAOI2006]受欢迎的牛
    2017年09月23日普级组 环
  • 原文地址:https://www.cnblogs.com/wwz-wwz/p/5914264.html
Copyright © 2011-2022 走看看