Справочная информация. Я пишу приложение, которое выполняет итерацию по списку серверов и получает различные сведения о каждой машине. Во время итерации мне нужно обновить различные элементы управления формы (чтобы отобразить сводку полученной информации). Поскольку он выполняет итерацию через список, я вызывал Thread.Sleep(), чтобы дать пользователю время для чтения информации до того, как следующая машина будет опрошена. Ниже мой код:Сохранение пользовательского интерфейса во время Thread.Sleep()
Task TestTask = Task.Factory.StartNew(() =>
{
foreach (String IpAddress in ServersToCheck)
{
if (IpAddress != String.Empty)
{
ServerBeingCheckedLabel.Text = IpAddress;
if (PingServer(IpAddress) == true)
{
PingChar_Label.ForeColor = Color.Green;
PingChar_Label.Text = "a";
CheckPermissionsAreValid(IpAddress);
}
else
{
PingChar_Label.ForeColor = Color.Red;
PingChar_Label.Text = "r";
PermChar_Label.ForeColor = Color.Red;
PermChar_Label.Text = "r";
}
}
}
Thread.Sleep(10000);
this.BackColor = FormBackGroundColor;
TestButton.Enabled = true;
RunTimer.Enabled = true;
}, CancellationToken.None, TaskCreationOptions.None, UiScheduler);
Это прекрасно работает в отношении обновления элементов управления на форме, но в Thread.Sleep() интерфейс блокируется. Конечно, если Thread.Sleep() вызывается в отдельной задаче, поток пользовательского интерфейса остается разблокированным?
Это, кажется, работает хорошо, когда последние данные были загружены, но не похоже, чтобы задержать при запуске через пункты перед этим –
Никогда не возражаете, я переместил AWAIT Task.Delay() в другую позицию и теперь, похоже, работает как шарм. Спасибо! –
@ChrisWright, пожалуйста. Не забудьте принять ответ, если ваш вопрос был разрешен. –