Я почти ничего не знаю о 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