Process.Kill()和流程事件

时间:2012-01-24 09:40:16

标签: c# .net multithreading events process

情况如下: 我必须创建一个程序,将另一个进程输出流输入到文本框中。它自我不会造成太多问题。但是,我必须运行此控制台应用程序的5个实例并将输出重定向到5个文本框,以及能够随时终止任何这些进程。据我所知,最好的方法是异步。但这里的问题是杀死进程,这是在不同的线程上创建的。如何在不访问它的情况下杀死它,因为它不存在于我必须杀死它的范围内。我最好的猜测是在Process.Start()上获得它的PID,所以我可以杀死它,所以......

是否可以从Process.kill()命令的进程中触发任何事件? 如果没有 - 有没有办法在与Process.Kill()大致相同的时间间隔内杀死某个进程,从而触发某种事件?

或许有人可以就如何解决这些问题提出一些其他方法或最佳做法?

编辑:我在不同线程上运行所有进程的原因是我在其中一些进程上使用Thread.Sleep(),如果有,则输入参数告诉我必须在x秒后杀死该进程。

3 个答案:

答案 0 :(得分:1)

Process.Kill()命令由于某种原因,实际上是消防过程退出事件。让我知道进程被杀死的最简单方法是创建一个包含有关结束信息的易失性字符串。 (在process.kill等之前将其更改为“已杀死”......)

答案 1 :(得分:0)

首先,你根本不需要线程。启动进程本身就是异步的,因此Process.Start(...)不会阻塞,您可以根据需要创建任意数量的进程。

您应该考虑创建Process类实例并将CanRaiseEvents属性设置为true,而不是使用静态Process.Start方法。此外,您可以注册一些事件(每个实例) - 只有在CanRaiseEvents设置为true时才会引发这些事件,但是在进程退出后(包括Kill()调用)也会引发这些事件。

答案 2 :(得分:0)

致电时

Process.Start() 

它返回一个Process类实例,您可以使用它从输出中检索信息并随时终止该进程

Process p = Process.Start("process.exe");
//some operations with process, may be in another thread
p.Kill()