我正在产生一个在可见控制台窗口中运行的子进程(它是一个运行MSBuild的批处理文件),我想让进程生成的输出显示在可见的控制台窗口中,并捕获该输出所以我可以在代码中处理它.我已经阅读了其他几个问题以及处理ProcessStartInfo.RedirectStandardOutput等的MSDN文档,我可以捕获重定向流的输出并在代码中处理它就好了:
Process msBuild = new Process();
msBuild.StartInfo.FileName = "Build.bat";
msBuild.StartInfo.UseShellExecute = false;
msBuild.StartInfo.RedirectStandardOutput = true;
msBuild.Start();
string output = msBuild.StandardOutput.ReadToEnd();
msBuild.WaitForExit();
Run Code Online (Sandbox Code Playgroud)
问题是输出不会显示在子进程的控制台窗口中; 我只是在进程运行时屏幕上出现一个空白的控制台窗口,它在完成时消失.
我想我可以隐藏实际的子进程窗口,并显示第二个窗口,我只是将输出写入捕获时,但这似乎比必要的工作更多.有没有办法让输出显示在控制台窗口中,并在完成后仍然捕获它以进行处理?
刚刚开始在BNR的Mac OS X Cocoa程序设计(第4版)的帮助下学习Objective-C和Cocoa ,我正在研究基于文档的应用程序.我已经阅读了Apple关于文档体系结构的开发人员文档,并选择了子类化NSWindowController和覆盖makeWindowControllers我的NSDocument子类.我有几个理由这样做:
NSDocument子类中)与视图逻辑(在NSWindowController子类中)分开.NSWindowController和覆盖windowTitleForDocumentDisplayName:NSWindowController除了最简单的应用程序之外的所有子类,我的绝对不是"简单"所以,我的NSDocument子类是一个模型控制器,我的NSWindowController子类是一个视图控制器.此外,我理解应用程序的"工作"大部分是在控制器对象中完成的,因为视图和模型应该尽可能与应用程序无关并且可以重用.现在我的问题是:这两种类型的控制器如何相互作用才真正实现这种"工作"?
例如,假设我正在编写电子表格应用程序,并且我想要一个菜单项(或工具栏按钮),它会显示一张表格,用于从我的某些数据创建图表或图表.在该表中,用户将输入各种参数和选项以了解如何创建图表或图表,然后单击"确定"(或调用任何按钮).
谁应该响应菜单项的操作,文档(模型控制器)或窗口控制器(视图控制器)?实际加载和显示工作表的任务似乎与"视图相关",所以它应该进入窗口控制器,对吗?但是工作表的控制器需要一个模型来显示给用户(一个Chart对象,或者可能ChartInputs); 该模型在哪里创建并提供给纸张控制器?文档是否应该通过创建ChartInputs模型对象来响应菜单项,然后将其传递给窗口控制器,窗口控制器创建图纸控制器,将模型对象传递给它,并显示工作表?或者窗口控制器应该响应菜单项,请求新的模型对象(可能通过依赖注入通过某种工厂提供到窗口控制器的构造函数中),然后继续创建图纸控制器,传递模型,并显示表?
用户填写表单并单击"确定"后怎么办?应该在哪里返回控制来处理用户的选择并实际创建图表 - 窗口控制器,文档或两者?如果逻辑在用户单击"确定"之后但在表单被解除之前验证用户的输入(如果某些内容无效)?