多线程01

C#
本文总阅读量:
  1. 1. 进程线程应用程序域概念
  2. 2. 相关进程操作
  3. 3. 线程操作见https://luox78.github.io/tags/thread/
  4. 4. WinForm中跨线程访问控件
  5. 5. Thread类的一些常用成员

进程线程应用程序域概念

进程,线程略

应用程序域(AppDomain):它提供安全而通用的处理单元,公共语言运行库可使用它来提供应用程序之间的隔离。您可以在具有同等隔离级别(存在于单独的进程中)的单个进程中运行几个应用程序域,而不会造成进程间调用或进程间切换等方面的额外开销。优势: 在一个应用程序中出现的错误不会影响其他应用程序。能够在不停止整个进程的情况下停止单个应用程序。应用程序域形成了托管代码的隔离、卸载和安全边界。在任意给定时间,每一线程都在一个应用程序域中执行。

线程拥有自己的“程序计数器”用来记录下一条要执行的指令。

线程拥有自己的寄存器,保存着线程当前的工作变量

线程拥有自己的堆栈,用来记录执行历史其中每一帧记保存了一调用的但是还没有返回的过程

相关进程操作

Process类在System.Diagnostics命名空间下

打印所有进程名

1
2
3
4
5
var processes = Process.GetProcesses();
foreach (var item in processes)
{
Console.WriteLine(item.ProcessName);
}

启动关闭某进程

1
2
3
var p = Process.Start("Notepad.exe");
Thread.Sleep(1000);
p.Kill();

通过AppDomain启动”新”进程(系统不会创建新的进程)

1
2
3
Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);
var appDomain = AppDomain.CreateDomain("NewAppDomain");
appDomain.ExecuteAssembly("assemblyName");

线程操作见https://luox78.github.io/tags/thread/

WinForm中跨线程访问控件

1
this.textBox.Invoke((delegate)method,params arguements);

method可以为new Action<string>(methodName),根据传入的参数不同设置

案例:大文件拷贝显示进度条

new thread来进行拷贝,控件访问使用invoke

Thread类的一些常用成员

Start()启动线程,导致操作系统将当前实例的状态更改为 ThreadState.Running
Abort()终止线程,请求操作系统请终止该线程。
Join()在继续执行之前,阻塞调用线程,直到某个线程终止为止。带参数的重载表示超时时间,如果超过超时时间,则线程不再阻塞继续执行。
IsAlive如果此线程已启动并且尚未正常终止或中止,则为 true;否则为 false。
IsBackground指示某个线程是否为后台线程。
ManagedThreadId获取当前托管线程的唯一标识符。
Priority获取或设置一个值,该值指示线程的调度优先级。
ThreadState获取一个值,该值包含当前线程的状态。
Name获取或设置线程的名称。