Сообщение Re[4]: [.NET][async][WinForms] от 22.12.2016 7:33
Изменено 22.12.2016 9:01 Serginio1
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, Serginio1, Вы писали:
S>> И за, что минус?
S>В смысле минус? Это ж просто "не согласен" кнопка. Обозначение неудачное, но все привыкли.
S>Не согласен, т.к. всё советы в духе "просто используй X" без детального изучения матчасти принесут ещё больше вреда. Добавь в WPF app вот этот код:
S>
S>и попробуй найти все места, где что-то пошло не так. Там их как минимум шесть. Список —
S>
Ны дык значения контролов нужно устанавливать в потоке GUI
Поэтому правильно делать так.
А вот если в моем варианте RunAsync сделать
без .
то получим дедлок
S>Здравствуйте, Serginio1, Вы писали:
S>> И за, что минус?
S>В смысле минус? Это ж просто "не согласен" кнопка. Обозначение неудачное, но все привыкли.
S>Не согласен, т.к. всё советы в духе "просто используй X" без детального изучения матчасти принесут ещё больше вреда. Добавь в WPF app вот этот код:
S>
S> private void Button_Click(object sender, RoutedEventArgs e)
S> {
S> RunAsync(() => button.Content = "x_X")
S> .ContinueWith(t => MessageBox.Show("Completed:" + t.IsCompleted));
S> }
S> private async Task RunAsync(Action onNext)
S> {
S> await Task.Delay(1).ConfigureAwait(false);
S> onNext();
S> }
S>
S>и попробуй найти все места, где что-то пошло не так. Там их как минимум шесть. Список —
S>
спойлер | |
S>по ссылке | |
Ны дык значения контролов нужно устанавливать в потоке GUI
Поэтому правильно делать так.
private async Task Button_Click(object sender, RoutedEventArgs e)
{
await RunAsync().ConfigureAwait(true);
button.Content = "x_X";
MessageBox.Show("Completed:" + t.IsCompleted));
}
А вот если в моем варианте RunAsync сделать
await Task.Delay(1);
без .
ConfigureAwait(false);
то получим дедлок
Re[4]: [.NET][async][WinForms]
Здравствуйте, Sinix, Вы писали:
S>Не согласен, т.к. всё советы в духе "просто используй X" без детального изучения матчасти принесут ещё больше вреда. Добавь в WPF app вот этот код:
S>
S>и попробуй найти все места, где что-то пошло не так. Там их как минимум шесть. Список —
S>
Ны дык значения контролов нужно устанавливать в потоке GUI
Поэтому правильно делать так.
А вот если в моем варианте RunAsync сделать
без .
то получим дедлок
S>Не согласен, т.к. всё советы в духе "просто используй X" без детального изучения матчасти принесут ещё больше вреда. Добавь в WPF app вот этот код:
S>
S> private void Button_Click(object sender, RoutedEventArgs e)
S> {
S> RunAsync(() => button.Content = "x_X")
S> .ContinueWith(t => MessageBox.Show("Completed:" + t.IsCompleted));
S> }
S> private async Task RunAsync(Action onNext)
S> {
S> await Task.Delay(1).ConfigureAwait(false);
S> onNext();
S> }
S>
S>и попробуй найти все места, где что-то пошло не так. Там их как минимум шесть. Список —
S>
спойлер | |
S>по ссылке | |
Ны дык значения контролов нужно устанавливать в потоке GUI
Поэтому правильно делать так.
private async Task Button_Click(object sender, RoutedEventArgs e)
{
await RunAsync().ConfigureAwait(true);
button.Content = "x_X";
MessageBox.Show("Completed:" + t.IsCompleted));
}
А вот если в моем варианте RunAsync сделать
await Task.Delay(1);
без .
ConfigureAwait(false);
то получим дедлок