c# - 使用 DataReceivedEventHandler 函数中的字符串更新主窗体的文本框控件?
问题描述
我正在使用微软的示例使用异步方法处理标准输出和标准错误: https ://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.datareceivedeventhandler?view=net-5.0
但是,如何在主窗体中更新文本框的文本属性?因为,它不允许线程在另一个线程中更新控制。即,我希望下面的这个处理程序更新 frmMain.txtBox1.text 以在文本框中显示标准输出日志。
private static void SortOutputHandler(object sendingProcess,
DataReceivedEventArgs outLine)
{
// Collect the sort command output.
if (!String.IsNullOrEmpty(outLine.Data))
{
numOutputLines++;
// Add the text to the collected output.
sortOutput.Append(Environment.NewLine +
$"[{numOutputLines}] - {outLine.Data}");
}
}
解决方案
假设frmMain
是一个有效的实例(并指向屏幕上已经显示的表单),并且txtBox1
它的 modifiers 属性已更改为 public 因此它是可见的,您可以执行以下操作:
frmMain.txtBox1.Invoke((MethodInvoker) delegate {
// ... put code in here ...
});
如果 frmMain 实际上是您的表单的类型名称,您需要获取对显示在屏幕上的 frmMain 实际实例的引用。有多种方法可以做到这一点,包括迭代打开的表单,或者可能事先从其他地方传入该实例。
推荐阅读
- redux-form - 表单提交后如何取消 react-final-form 验证?
- windows - 在四个 3840 x 2160 屏幕上自动打开和定位八个网页 (Windows 10)
- soap - C0000005 ACCESS_VIOLATION 异常与 Progress Openedge 调用 Web 服务时
- python - 通过“文件名”检索 GridFS 文档的文档“_id”
- javascript - 我们如何在打字稿中创建带有前缀/后缀单词的字符串类型?
- excel - 如何在excel中将a+bi表单数据更改为复数?
- mysql - 在远程主机上执行 mysql 查询时转义 mysql 密码中的特殊字符
- forms - 如果未选中复选框(= 请求为空),则不处理 Symfony 表单
- python - 如何获取值具有特定值的行的索引?
- html - 将 img 定位在其父 div 的底部,而不使任何位置成为绝对位置