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

    完!!

  • 相关阅读:
    [BZOJ1211]:[HNOI2004]树的计数(prufer序列)
    [CSP-S模拟测试]:那一天她里我而去(堆优化Dijkstra)
    [CSP-S模拟测试]:那一天我们许下约定(DP+组合数学)
    BZOJ3130 [Sdoi2013]费用流 【网络流 + 二分】
    BZOJ3124 [Sdoi2013]直径 【树的直径】
    BZOJ3122 [Sdoi2013]随机数生成器 【BSGS】
    BZOJ2707 [SDOI2012]走迷宫 【概率dp + tarjan + 高斯消元】
    BZOJ2726 [SDOI2012]任务安排 【斜率优化 + cdq分治】
    洛谷P2351 [SDOi2012]吊灯 【数学】
    BZOJ2246 [SDOI2011]迷宫探险 【记忆化搜索dp + 概率】
  • 原文地址:https://www.cnblogs.com/wwz-wwz/p/5914264.html
Copyright © 2011-2022 走看看