gpt4 book ai didi

wpf - 文本框直到方法完成后才会更新

转载 作者:行者123 更新时间:2023-12-04 18:11:28 24 4
gpt4 key购买 nike

我正在尝试使用文本框来显示“任务已完成”。基本上就像控制台应用程序将如何显示正在发生的事情一样。

但是,仅在Window_Loaded_1完成后才更新文本框中的文本,然后显示所有文本,而不是实时显示。

XAML代码:

<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));
}
}

最佳答案

使用await:

private async void Window_Loaded_1(object sender, RoutedEventArgs e)
{
Task t = Task.Run(() => Directory.CreateDirectory(this.ProjectName));
LogData += "Starting new project creation...." + Environment.NewLine;
LogData += "Creating project directory '" + ProjectName + "'....";
try
{
await t;
}
catch (Exception ex)
{
LogData += "Error:" + Environment.NewLine;
LogData += ex.ToString();
}

LogData += "Done!" + Environment.NewLine;

t = Task.Run(() => File.Copy(this.VideoFilePath, newVideoPath));
LogData += "Copying video file to project directory....";
try
{
await t;
}
catch (Exception ex)
{
LogData += "Error:" + Environment.NewLine;
LogData += ex.ToString();
}

LogData += "Done!" + Environment.NewLine;

// many more tasks
}

关于wpf - 文本框直到方法完成后才会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13296615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com