最近在做一个项目时,需要在一个进程中调用另一个进程,这里记录一下,
在msdn 上有一个简介,上面的介绍:https://msdn.microsoft.com/en-us/library/system.diagnostics.process.start(v=vs.110).aspx
是通过
Process.Start
方法,这个方法是一个重构的方法。
有时调用其他的进程可能调用不起来,这时可能还需要一句,来获取另一个进程的工作路径
Process proc = new Process();
string MainAppPath = "test.exe";//the path of the exe file
proc.StartInfo.FileName = MainAppPath;
proc.StartInfo.WorkingDirectory = Path.GetDirectoryName(MainAppPath);;
proc.Start();
string MainAppPath = "test.exe";//the path of the exe file
proc.StartInfo.FileName = MainAppPath;
proc.StartInfo.WorkingDirectory = Path.GetDirectoryName(MainAppPath);;
proc.Start();
参考链接:https://segmentfault.com/a/1190000003740834
虽然这样调用了另一个线程,但是如果想要把该线程给杀死了,但是由于我调用的那个线程里面的主线程又创建了几个线程,但是我虽然把主线程
给杀死了,但是那几个子线程并没有停止运行,后来在网上又继续百度了一下,是因为新开的线程的IsBackground属性没有设置为True,新建的线程
默认是FALSE,当主线程退出的时候,IsBackground=False的线程还会继续执行下去,直到线程执行结束,只有IsBackground=True的线程才会随着
主线程的退出而退出,当初始化一个线程的时候,把IsBackground设为True,指示该线程为后台线程,只有这样后台线程才会随着主线程的退出而退出
原理:只有所有前台线程都终止以后,CLR就会对每一个活动在后台的线程调用Abort()来彻底终止应用程序。