【问题标题】:How to kill a Windows Process through a WPF ListView?如何通过 WPF ListView 杀死 Windows 进程?
【发布时间】:2013-01-05 21:09:19
【问题描述】:

我是 WPF 新手,正在尝试构建自己的 Windows 任务管理器。 现在我有一个窗口,在我的机器上运行的所有活动进程都显示在 ListView 中。

现在这是我的问题:我有一个名为 End Process 的按钮。我想从ListView 中选择一个进程,然后按End Process 按钮将其终止。我只是不知道该怎么做。

我已将此代码 (C#) 分配给按钮:

private void End_Process_Click(object sender, RoutedEventArgs e)
{
    Process[] procs=Process.GetProcessesByName(ProcessesListView.SelectedItem.ToString());    
    foreach (Process p in procs)
    {
        p.Kill();
    }
}

【问题讨论】:

  • 什么地方做得不对?
  • 您的代码会杀死与所选项目具有相同 name 的所有进程。只是为了确保您杀死 right 进程,使用进程 ID 作为标识符。
  • Tnx 快速响应。事实上它什么也没做。好像按钮没有连接任何东西。 (虽然 MessageBox 工作正常)
  • 调试器会在方法中遇到断点吗?进程是否真的被杀死了(检查任务管理器)并且你的列表没有更新? “MessageBox 工作正常”是什么意思?我看不到MessageBox。 SelectedItem 的 ToString 值是多少?它可能与您的预期不同,GetProcessesByName 没有找到任何东西。
  • 1.没有中断,程序运行无异常。 2)该过程没有被杀死(我正在用记事本做这件事)。 3)我提到MessageBox是为了消除按钮没有触发正确方法的可能性,你可以忽略它,它不再存在了。 4) ToString 值可能是问题所在。当我使用“MessageBox”检查它时,我会看到完整的路径:System.Diagnostics......(资源管理器)。您对我如何才能获得没有前缀的 Explorer 名称有任何建议吗?或者我如何使用“ProcessId”? Tnx 很多...

标签: c# .net wpf listview


【解决方案1】:

我怀疑您列表中的项目是实际的 Process 对象。如果是这样,你可以这样做:

private void End_Process_Click(object sender, RoutedEventArgs e)
{
  Process process = (Process)ProcessesListView.SelectedItem;
  process.Kill();
}

【讨论】:

  • 哇,在 StackOverflow 上的 10 分钟解决了我 2 天的头痛 :) 非常感谢!完美运行...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多