private void Select(Stack<string> path, TreeViewItem[] items) { var s = path.Pop(); if (path.Any()) { foreach (var item in items.OfType<IoDeviceDirectoryItem>().Where(item => item.ItemName == s)) { item.IsExpanded = true; Action action = () => Select(path, item.Items.Cast<TreeViewItem>().ToArray()); Dispatcher.BeginInvoke(action); break; } } else { foreach (var item in items.OfType<IoDeviceItem>().Where(item => item.ItemName == s)) { item.IsSelected = true; break; } } }