gpt4 book ai didi

c# - Process.OutputDataReceived 在哪个线程上引发和处理?

转载 作者:太空狗 更新时间:2023-10-29 17:54:10 25 4
gpt4 key购买 nike

我有一个多线程 winforms 应用程序。一个线程用于 GUI,一个线程用于后台处理。在后台处理中,我通过 Process 类与外部进程通信以发送接收数据。

我对注册 Process.OutputDataReceived 的处理程序在哪个线程上运行感到困惑。根据 MS 文档:“OutputDataReceived 事件表明关联的进程已写入其重定向的 StandardOutput 流。”但尚不清楚是谁发起了这次事件。

参见下面的示例代码:

myProc= new Process();
myProc.StartInfo.UseShellExecute = false;
myProc.StartInfo.RedirectStandardOutput = true;
myProc.StartInfo.RedirectStandardError = true;
myProc.StartInfo.RedirectStandardInput = true;
myProc.StartInfo.FileName = "myapp.exe";
myProc.StartInfo.Arguments = arguments;
myProc.StartInfo.CreateNoWindow = true;
myProc.OutputDataReceived += new DataReceivedEventHandler(DataReceivedFromProc);
myProc.ErrorDataReceived += new DataReceivedEventHandler(ErrorReceivedFromProc);
myProc.Start();
myOutputStream = myProc.StandardInput;
myProc.BeginOutputReadLine();
myProc.BeginErrorReadLine();

那么在这种情况下,DataReceivedFromProc 在哪个线程上运行?如果在我的 GUI 线程和工作线程上执行上述内容会有区别吗?

最佳答案

您应该设置 myProc.SynchronizingObject property到您的表单或控件。

否则,我相信该事件将在 IO 完成线程(来自 ThreadPool)上引发。

关于c# - Process.OutputDataReceived 在哪个线程上引发和处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5642302/

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