WPF 等待文本框更新
WPF Wait for textbox to update
我有一个 WPF window,它应该更新一个文本框来告诉用户发生了什么,然后执行一个 bat 文件。
然而它只是执行这些文件而不更新文本框。
MainLine.Text = "Running for " + customer;
DataInput.Text = "Running Data input.";
ExecuteProcess(Baseloco + "01_DataInput.bat");
Mailsort.Text = "Running Mailsort.";
ExecuteProcess(Baseloco + "02_Mailsort.bat");
SampleandRecon.Text = "Running sample + recon.";
ExecuteProcess(Baseloco + "03_SampleandRecon.bat");
执行过程只是调用我写的bat文件的方法
所以我希望文本框在 运行 bat 文件
之前更新并完全完成更新
有什么帮助吗?
我建议您初始化一个新线程来完成这项工作,然后使用 dispatcher.invoke 设置文本框。像这样:
Task.Run(() =>
{
Dispatcher.Invoke(() =>
{
MainLine.Text = "Running for " + customer;
DataInput.Text = "Running Data input.";
});
ExecuteProcess(Baseloco + "01_DataInput.bat");
Dispatcher.Invoke(() => Mailsort.Text = "Running Mailsort.");
ExecuteProcess(Baseloco + "02_Mailsort.bat");
Dispatcher.Invoke(() => SampleandRecon.Text = "Running sample + recon.");
ExecuteProcess(Baseloco + "03_SampleandRecon.bat");
});
编辑:
由于说明批处理文件可能需要 运行 并行,我建议使用此代码以获得更好的性能:
Task.Run(() =>
{
Dispatcher.Invoke(() =>
{
MainLine.Text = "Running for " + customer;
DataInput.Text = "Running Data input.";
});
ExecuteProcess(Baseloco + "01_DataInput.bat");
});
Task.Run(() =>
{
Dispatcher.Invoke(() => Mailsort.Text = "Running Mailsort.");
ExecuteProcess(Baseloco + "02_Mailsort.bat");
});
Task.Run(() =>
{
Dispatcher.Invoke(() => SampleandRecon.Text = "Running sample + recon.");
ExecuteProcess(Baseloco + "03_SampleandRecon.bat");
});
您应该将 ExecuteProcess 方法声明为异步的:
private async Task ExecuteProcess(string file)
{
await Task.Run(() =>
{
// run file...
});
}
然后 运行 您的执行步骤,例如在异步事件处理程序中:
private async void Button_Click(object sender, RoutedEventArgs e)
{
MainLine.Text = "Running for " + customer;
DataInput.Text = "Running Data input.";
await ExecuteProcess(Baseloco + "01_DataInput.bat");
Mailsort.Text = "Running Mailsort.";
await ExecuteProcess(Baseloco + "02_Mailsort.bat");
SampleandRecon.Text = "Running sample + recon.";
await ExecuteProcess(Baseloco + "03_SampleandRecon.bat");
}
我有一个 WPF window,它应该更新一个文本框来告诉用户发生了什么,然后执行一个 bat 文件。 然而它只是执行这些文件而不更新文本框。
MainLine.Text = "Running for " + customer;
DataInput.Text = "Running Data input.";
ExecuteProcess(Baseloco + "01_DataInput.bat");
Mailsort.Text = "Running Mailsort.";
ExecuteProcess(Baseloco + "02_Mailsort.bat");
SampleandRecon.Text = "Running sample + recon.";
ExecuteProcess(Baseloco + "03_SampleandRecon.bat");
执行过程只是调用我写的bat文件的方法
所以我希望文本框在 运行 bat 文件
之前更新并完全完成更新有什么帮助吗?
我建议您初始化一个新线程来完成这项工作,然后使用 dispatcher.invoke 设置文本框。像这样:
Task.Run(() =>
{
Dispatcher.Invoke(() =>
{
MainLine.Text = "Running for " + customer;
DataInput.Text = "Running Data input.";
});
ExecuteProcess(Baseloco + "01_DataInput.bat");
Dispatcher.Invoke(() => Mailsort.Text = "Running Mailsort.");
ExecuteProcess(Baseloco + "02_Mailsort.bat");
Dispatcher.Invoke(() => SampleandRecon.Text = "Running sample + recon.");
ExecuteProcess(Baseloco + "03_SampleandRecon.bat");
});
编辑:
由于说明批处理文件可能需要 运行 并行,我建议使用此代码以获得更好的性能:
Task.Run(() =>
{
Dispatcher.Invoke(() =>
{
MainLine.Text = "Running for " + customer;
DataInput.Text = "Running Data input.";
});
ExecuteProcess(Baseloco + "01_DataInput.bat");
});
Task.Run(() =>
{
Dispatcher.Invoke(() => Mailsort.Text = "Running Mailsort.");
ExecuteProcess(Baseloco + "02_Mailsort.bat");
});
Task.Run(() =>
{
Dispatcher.Invoke(() => SampleandRecon.Text = "Running sample + recon.");
ExecuteProcess(Baseloco + "03_SampleandRecon.bat");
});
您应该将 ExecuteProcess 方法声明为异步的:
private async Task ExecuteProcess(string file)
{
await Task.Run(() =>
{
// run file...
});
}
然后 运行 您的执行步骤,例如在异步事件处理程序中:
private async void Button_Click(object sender, RoutedEventArgs e)
{
MainLine.Text = "Running for " + customer;
DataInput.Text = "Running Data input.";
await ExecuteProcess(Baseloco + "01_DataInput.bat");
Mailsort.Text = "Running Mailsort.";
await ExecuteProcess(Baseloco + "02_Mailsort.bat");
SampleandRecon.Text = "Running sample + recon.";
await ExecuteProcess(Baseloco + "03_SampleandRecon.bat");
}