Добавить текст в TextBox во время ShowDialog и Add_ContentRendered - PullRequest
0 голосов
/ 14 апреля 2019

При загрузке моего сценария PowerShell WPF я хочу показать пользователю некоторую информацию о том, что сценарий загружает несколько вещей из Active Directory. Как и мой сценарий, окно не отвечает во время загрузки (которая занимает около 20 секунд), а затем, когда все сделано, TextBox обновляется четырьмя строками, добавляющими текст в TextBox. Я хочу, чтобы он выполнял задачу 1, обновлял TextBox, затем задачу 2, обновлял TextBox и так далее. Как мне это сделать?

В блоке Add_ContentRendered у меня есть четыре $ WPFlogTxtBox.AddText («Некоторый текст»), но они отображаются в $ WPFlogTxtBox сразу после завершения блока Add_ContentRendered, а не тогда, когда они отображаются в скрипте.

XAML содержит:

<TextBox x:Name="logTxtBox" HorizontalAlignment="Left" Height="112" Margin="10,290,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="496" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"/>

Остальная часть сценария сокращена:

$Form.Add_ContentRendered({

$WPFlogTxtBox.AddText("Getting OUs")
$OUs = Get-ADOrganizationalUnit -Filter '*' | sort Name

$WPFlogTxtBox.AddText("Getting users")
$users = Get-ADUser -Filter * | sort Name

$WPFlogTxtBox.AddText("Getting groups")
$groups = Get-ADGroup -Filter '*' | sort Name

})

$Form.ShowDialog()

Это работает, кроме того, что текст добавляется в TextBox, когда все в Add-ContentRendered завершено.

Я хочу, чтобы метод AddText добавлял текст при выполнении команды, а не при завершении всего вызывающего блока (Add_ContentRendered).

1 Ответ

0 голосов
/ 14 апреля 2019

По сути, вам нужно создать поток, чтобы окно перерисовывалось ...

$WPFlogTxtBox.Dispatcher.Yield("ApplicationIdle");

Лучшим решением было бы выполнить работу в другом потоке и вызватьв диспетчер управления, чтобы обновить его. Show-UI делает такие вещи для вас, но вы можете сделать это самостоятельно, раскрутив другое пространство выполнения PowerShell - это немного, чтобы разобраться здесь.Посмотрите код ShowUI на github или сообщения в блоге от Boe Prox или Стивена Оуэна

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...