当我启动一个过程时,我无法控制我的文本框。
我的问题是:如何在启动流程时修改文本框?
即使我在启动流程之前尝试修改文本框,它仍然无效。
我在这个论坛上找到了一些答案,但对于我的问题,我的解释有点难以实现。
我创建了一个小程序,它将运行批处理文件进行备份。备份运行时,我无法修改文本框,禁用按钮等。
我已经看到这是正常的,但我不知道如何实施解决方案。我的最后一次尝试是Dispatcher.invoke
,如下所示。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
tb_Status.Text = "Ready";
}
public void status()
{
Dispatcher.Invoke(DispatcherPriority.Send, new Action( () => { tb_Status.Text = "The backup is running!"; } ) );
}
public void process()
{
try
{
Process p = new Process();
p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "Robocopy.bat";
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
tb_Output.Text = File.ReadAllText("Backup\\log.txt");
}
catch (Exception ex)
{
tb_Status.Text = ex.Message.ToString();
}
}
private void Bt_Start_Click(object sender, EventArgs e)
{
status();
Directory.CreateDirectory("Backup");
process();
tb_Status.Text = "The backup finished";
File.Delete("Backup\\log.txt");
}
}
答案 0 :(得分:0)
当我将status()方法的主体替换为:
时Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Send, new Action(() => { tb_Status.Text = "The backup is running!"; }));
Application.DoEvents();
它可以正常工作。