我有这个函数:
public IEnumerable<string> EnumPrograms() {
return dev.AudioSessionManager2.Sessions.AsEnumerable()
.Where(s => s.GetProcessID != 0)
.Select(s => {
try {
return Process.GetProcessById((int)s.GetProcessID).ProcessName;
}
catch (ArgumentException) {
return null;
}
});
}
由于可能存在具有不存在的PID的会话,因此try..catch是必需的。我想跳过它们。是否可以从Select
回调中实现这一点,或者我需要添加一个新的Where
条件来跳过null
值?
Process.GetProcesses()
需要多长时间,但至少你只需要调用它一次,而不是每个会话都调用一次。 - Jon SkeetGetProcesses
和GetProcessByID
都在背后调用了EnumProcesses
。 - Rotem