Я почти ничего не знаю о 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
на нем
Я придумал это решение, которое также поражает меня как уродливое и ужасное, но лучше, чем выше. Любые идеи?
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