我对linq几乎一无所知。
我正在这样做:
var apps = from app in Process.GetProcesses()
where app.ProcessName.Contains( "MyAppName" ) && app.MainWindowHandle != IntPtr.Zero
select app;
这让我得到了符合该标准的所有正在运行的进程。
但我不知道如何获得第一个。我在网上找到的例子似乎意味着我必须这样做
var matchedApp = (from app in Process.GetProcesses()
where app.ProcessName.Contains( "MyAppName" ) && app.MainWindowHandle != IntPtr.Zero
select app).First();
这让我觉得有点难看,并且如果没有匹配的进程也会抛出异常。有没有更好的办法?
UPDATE
我实际上正在尝试找到第一个匹配的项目,然后调用SetForegroundWindow
on it
我想出了这个解决方案,它也让我觉得丑陋和糟糕,但比上面的要好。有任何想法吗?
var unused = from app in Process.GetProcesses()
where app.ProcessName.Contains( "MyAppName" ) && app.MainWindowHandle != IntPtr.Zero
select SetForegroundWindow( app.MainWindowHandle ); // side-effects in linq-query is technically bad I guess
@FryHard FirstOrDefault 可以工作,但请记住,如果没有找到它,它会返回 null。此代码未经测试,但应该接近您想要的:
var app = Process.GetProcesses().FirstOrDefault(p => p.ProcessName.Contains("MyAppName") && p.MainWindowHandle != IntPtr.Zero);
if (app == null)
return;
SetForegroundWindow(app.MainWindowHandle);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)