我对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();
这让我感觉有点丑陋,而且如果没有匹配的进程会抛出异常。有更好的方法吗?
更新
实际上,我正在尝试找到第一个匹配的项目,并在其上调用SetForegroundWindow
。
我想出了这个解决方案,它也让我感觉很丑陋和糟糕,但比上面的方法好。有什么想法吗?
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
(query).FirstOrDefault()
,但我认为扩展方法语法更易读。 - Jim Deville