gpt4 book ai didi

c# - 运行 System.Diagnostics 进程时如何在线程之间传递对象

转载 作者:太空狗 更新时间:2023-10-29 23:48:24 26 4
gpt4 key购买 nike

我不会提供所有代码,但会提供我想做的事情的示例。我有这段代码用于从外部进程 stderr 更新 GUI 元素。

我的流程是这样的:

ProcessStartInfo info = new ProcessStartInfo(command, arguments);

// Redirect the standard output of the process.
info.RedirectStandardOutput = true;
info.RedirectStandardError = true;
info.CreateNoWindow = true;

// Set UseShellExecute to false for redirection
info.UseShellExecute = false;

proc = new Process();
proc.StartInfo = info;
proc.EnableRaisingEvents = true;

// Set our event handler to asynchronously read the sort output.
proc.OutputDataReceived += new DataReceivedEventHandler(proc_OutputDataReceived);
proc.ErrorDataReceived += new DataReceivedEventHandler(proc_ErrorDataReceived);
proc.Exited += new EventHandler(proc_Exited);

proc.Start();

// Start the asynchronous read of the sort output stream. Note this line!
proc.BeginOutputReadLine();
proc.BeginErrorReadLine();

然后我有一个事件处理程序

void proc_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
if (e.Data != null)
{
UpdateTextBox(e.Data);
}
}

调用以下内容,引用特定的文本框控件。

private void UpdateTextBox(string Text)
{
if (this.InvokeRequired)
this.Invoke(new Action<string>(this.SetTextBox), Text);
else
{
textBox1.AppendText(Text);
textBox1.AppendText(Environment.NewLine);
}
}

我想要的是这样的:

private void UpdateTextBox(string Text, TextBox Target)
{
if (this.InvokeRequired)
this.Invoke(new Action<string, TextBox>(this.SetTextBox), Text, Target);
else
{
Target.AppendText(Text);
Target.AppendText(Environment.NewLine);
}
}

我可以使用该线程更新不同的文本框,而无需为 GUI 中的每个控件创建单独的函数。

这可能吗? (显然上面的代码不能正常工作)

谢谢。

更新:

private void UpdateTextBox(string Text, TextBox Target)
{
if (this.InvokeRequired)
this.Invoke(new Action<string, TextBox>(this.**UpdateTextBox**), Text, Target);
else
{
Target.AppendText(Text);
Target.AppendText(Environment.NewLine);
}
}

这段代码现在似乎可以正常工作了,因为我注意到有一个拼写错误。可以使用吗?

最佳答案

您提供的代码看起来不错,是在线程之间发送此类消息的好方法。

关于c# - 运行 System.Diagnostics 进程时如何在线程之间传递对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4117367/

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