I am trying to use a textbox to show Tasks completing. Basically like how console application would show what is happening.
However the text in the textbox is only updating after Window_Loaded_1 has completed, then all the text gets displayed instead of in realtime.
xaml code:
<Window x:Class="timelineTesting.Windows.CreateNewProject" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="CreateNewProject" Height="300" Width="579" Loaded="Window_Loaded_1"> <Grid> <Grid.RowDefinitions> <RowDefinition/> </Grid.RowDefinitions> <TextBox Text="{Binding Path=LogData, UpdateSourceTrigger=PropertyChanged}" /> </Grid> C# code:
public partial class CreateNewProject : Window, INotifyPropertyChanged { private string _data; public String LogData { get { return _data; } set { _data = value; OnPropertyChanged("LogData"); } } public CreateNewProject() { InitializeComponent(); this.DataContext = this; } private void Window_Loaded_1(object sender, RoutedEventArgs e) { Task t = new Task(() => Directory.CreateDirectory(this.ProjectName)); LogData+="Starting new project creation...." + Environment.NewLine; LogData += "Creating project directory '" + ProjectName + "'...."; try { t.Start(); t.Wait(); } catch (Exception ex) { LogData += "Error:" + Environment.NewLine; LogData += ex.InnerException.ToString(); } LogData+= "Done!" + Environment.NewLine; t = new Task(() => File.Copy(this.VideoFilePath, newVideoPath)); LogData+= "Copying video file to project directory...."; try { t.Start(); t.Wait(); } catch (Exception ex) { LogData+= "Error:" + Environment.NewLine; LogData+= ex.InnerException.ToString(); } LogData+= "Done!" + Environment.NewLine; // many more tasks } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChangedEventHandler handler = this.PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(propertyName)); } }
Waitis blocking the GUI thread. The GUI can't update while it's busy waiting for your task.Waits, so the UI can't repaint itself.