C#_线程和进程

Posted 龙海俊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#_线程和进程相关的知识,希望对你有一定的参考价值。

进程


  进程是应用程序的一次动态执行。

  命名空间 ——Diagnostics

  类——Process

 

            Process.Start("calc");// 打开计算器

 

  弊端:有的程序的注册名不知道,填错了程序报错!

  代码:

    //实例化进程类
    Process p = new Process();
    //创建进程开启路径对象
    ProcessStartInfo psi = new ProcessStartInfo(textBox1.Text);
    //进程类开启路径指向
    p.StartInfo = psi;
    //启动进程,不是立刻开启,什么时候开启时由CPU决定
    p.Start();

                                 总的来说进程不是很好用。


线程

  通过System.Threading.Thread类可以开始新的线程,并在线程堆栈中运行静态或实例方法。

  有的时候计算机出现假死状态,就是因为主线程被占用。

  //创建线程类,并使用委托,指定这个线程要执行的是哪个函数
  Thread th = new Thread(委托);
  //开启线程执行功能,也不是立刻执行
  th.Start();

  

问题一:

线程可以开启很多个,如果用户可以无限点击按钮,那么有可能会造成电脑CPU使用率过高   

用线程执行方法,只能传一个参数,并且此参数必须是object类型    

程序默认不允许跨线程访问对象    

关闭监控就可以了  怎么关?  在构造函数中,实例化方法下面加上这句话:  Control.CheckForIllegalCrossThreadCalls = false;

问题二:

默认主窗体已经关闭,但是线程如果还未执行完工作内容,那么会默默的继续执行,直到执行完毕后才会将整个进程关闭    

程序默认所有的线程都为:前台线程    

解决办法:将新开的线程变为后台线程  th.IsBackground = true;

a.启动线程
  顾名思义,“启动线程”就是新建并启动一个线程的意思,如下代码可实现:
    Thread thread1 = new Thread(new ThreadStart( Count));
  其中的 Count 是将要被新线程执行的函数。
b.杀死线程
  “杀死线程”就是将一线程斩草除根,为了不白费力气,在杀死一个线程前最好先判断它是否还活着(通过 IsAlive 属性),然后就可以调用 Abort 方法来杀死此        线程。
c.暂停线程
  它的意思就是让一个正在运行的线程休眠一段时间。如 thread.Sleep(1000); 就是让线程休眠1秒钟。
d.优先级
  这个用不着解释了。Thread类中hreadPRiority属性,它用来设置优先级,但不能保证操作系统会接受该优先级。一个线程的优先级可分为5种:Normal, AboveNormal, BelowNormal, Highest, Lowest。具体实现例子如下:
thread.Priority = ThreadPriority.Highest;
e.挂起线程
  Thread类的Suspend方法用来挂起线程,直到调用Resume,此线程才可以继续执行。如果线程已经挂起,那就不会起作用。
if (thread.ThreadState = ThreadState.Running) 
{
thread.Suspend();
}
f.恢复线程
  用来恢复已经挂起的线程,以让它继续执行,如果线程没挂起,也不会起作用。
if (thread.ThreadState = ThreadState.Suspended) 
{
thread.Resume();
}

 

以上是关于C#_线程和进程的主要内容,如果未能解决你的问题,请参考以下文章

linux C语言如何获取进程号和线程号?getpid()syscall(__NR_gettid)

C++线程问题

01_认识进程和线程

javaAPI_多线程基础_多线程基础1

线程池和进程池

多进程 multiprocessing 多线程Threading 线程池和进程池concurrent.futures