Я работает приложение WPF и хотите сделать что-то вроде этого:Отражать изменения в приложении WPF динамически
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
TextBox textBox = new TextBox();
mainGrid.Children.Add(textBox);
textBox.Text = "one";
Thread.Sleep(1000);
textBox.Text = "two";
Thread.Sleep(1000);
textBox.Text = "three";
Thread.Sleep(1000);
textBox.Text = "four";
}
}
На дисплее не загружается, пока вся эта обработка завершена, следовательно, у меня есть пробел, отвечать на запросы приложение до 3 секунд и текстовое поле со словом четыре после запуска вышеуказанного кода.
Я посмотрел на класс BackgroundWorker и попытался это:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
// Set up background worker object & hook up handlers
BackgroundWorker backgroundWorker;
backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorker_RunWorkerCompleted);
backgroundWorker.RunWorkerAsync();
}
private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() =>
{
TextBox textBox = new TextBox();
mainGrid.Children.Add(textBox);
textBox.Text = "one";
Thread.Sleep(1000);
textBox.Text = "two";
Thread.Sleep(1000);
textBox.Text = "three";
Thread.Sleep(1000);
textBox.Text = "four";
}));
}
private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Debug.WriteLine("done");
}
Тем не менее такое же поведение. Я хочу выполнить некоторые задачи в фоновом режиме/в разных потоках, которые будут выполнять изменения элементов пользовательского интерфейса при выполнении, и я хочу, чтобы эти изменения отображались на дисплее немедленно.
Я пытаюсь понять, как асинк и ждать работы. Я нашел этот ответ: http://stackoverflow.com/a/7615440/2136312 Но не понял этого, программа ждет завершения асинхронного вызова. Тогда как это отличается от обычного ожидания? почему добавление async делает GUI отзывчивым? – codeln
В двух словах, программирование async/await - это просто * простой способ записи «Задачи». Это позволяет пользовательскому интерфейсу реагировать, выполняя задачи в фоновом режиме. Как только задача будет завершена, она продолжит работу с кодом. См. [Здесь] (https://msdn.microsoft.com/en-us/library/hh191443.aspx) для более подробного объяснения. –