我正在尝试使用文本框来显示任务完成。基本上就像控制台应用程序如何显示正在发生的事情一样。
然而,文本框中的文本仅在 Window_Loaded_1 完成后更新,然后所有文本都会显示而不是实时显示。
xml代码:
<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#代码:
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));
}
}