#c# #powershell #shell32
Вопрос:
Когда я пытаюсь выполнить итерацию окон проводника файлов на C#.
Для выполнения метода Windows требуется 7-15 секунд.
В powershell это занимает меньше секунды.
Что вызывает такую длительную задержку?
Shell32.Shell o = new Shell32.Shell();
// This takes 7 - 15 seconds to execute
dynamic allWindows = o.Windows();
for (int i = 0; i < allWindows.count; i )
{
dynamic item = allWindows[i];
string location = item.LocationURL as string;
Console.log("Full path", location);
}
Редактировать:
После дополнительных испытаний. Я обнаружил, что длинный вызов происходит, когда я запускаю это в protected override void OnStartup(StartupEventArgs e)
своем приложении WPF.
Однако у него не будет такой большой задержки, если я вызову его в потоке STA, который запускается через 5 секунд после запуска приложения.
Комментарии:
1. Что же
Shell32
это такое , собственно говоря? Какая библиотека/пространство имен?2. Кроме того, почему вы используете
dynamic
то, что кажется строго типизированной библиотекой?3. Библиотека Элементов Управления И Автоматизации Microsoft Shell. Он возвращает com — объект с динамическими элементами.
4. Монитор процессов (ProcMon) может выявить причину замедления. Я подозреваю, что это может быть связано с запуском Internet Explorer. Можете ли вы опубликовать свой код PowerShell для целей сравнения?