【问题标题】:how to find all application/Thread running in a process in windows application in c#?如何在 c# 中的 windows 应用程序中查找进程中运行的所有应用程序/线程?
【发布时间】:2010-04-02 10:43:20
【问题描述】:

我想获取与进程关联的所有应用程序或线程的列表。例如,当我们打开不同的窗口时都使用 explorer.exe 运行,或者我们打开 mozila 的不同窗口时都在 firefox.exe 中。 我必须检查一个窗口是否已准备好打开,无需打开它。如果它在后台或最小化,则激活窗口。

【问题讨论】:

  • 您想了解线程还是窗口或两者?
  • ya..每个打开的新窗口都在进程的线程下运行..我必须找到一个窗口是否已经打开,是否意味着线程已启动?

标签: c# winforms multithreading windows-xp


【解决方案1】:

获取所有进程

      Process.GetProcesses();

       Process.GetProcessByName("Name"); //To get a process

        Process.GetCurrentProcess()  //To Get the current running process

一旦你获得了你的进程,你就有了一个名为 Threads 的属性。

这就是你要找的吗?

获得 Process 后,您可以使用 ProcessName,获得 ProcessThread 后,您可以使用 ID。

【讨论】:

  • 是的,但是每个新线程的 id 都是唯一的。我必须查找是否已经启动了类似类型的线程(窗口已打开),然后无需启动新线程。
  • 我不明白你在说什么。您想要一种通过 id 以外的方式查找线程的方法吗?我认为您可能需要一种更好的方法来控制生成线程的方式
  • @Nix,我的问题从一个概念开始,在这个概念中我动态加载程序集并在其中调用一个方法.. Assembly objAssembly = Assembly.LoadFrom(@AssemblyFile);类型 type = objAssembly.GetType(methodname); var objVar = Activator.CreateInstance(type); type.InvokeMember("ClassName", BindingFlags.Default | BindingFlags.InvokeMethod, null, objVar, oSystemUser);
  • 调用此方法的方法会打开一个新窗口。(线程)每个方法都由菜单打开。现在我必须检查一个线程(窗口)是否已经打开,那么就不需要打开同一个窗口了。
  • 我假设您可以获得正确的进程,但不知道哪个线程是哪个线程。我建议您需要进行设计更改,并且需要一些东西来创建/管理线程(因为 processthread 不会为您提供所需的东西(线程)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多