【发布时间】:2014-07-14 07:31:28
【问题描述】:
我有两个独立的程序,一个是控制台应用程序,另一个是 Windows 应用程序。
我的 Windows 应用程序:
- 具有图形界面、按钮和其他功能。
-
其中一个名为“research”的按钮:当我单击它时,我会使用这行代码启动控制台应用程序:
string strResult = ProcessHelper.LaunchProcessWaitForPipedResult("MyExecFile.exe", strArguments, 10 * 60 * 1000, true); // 10 mins max
我的控制台应用程序:
- 对目录中的所有现有文件进行查询。
我的问题:
我想在 windows 应用程序上创建一个进度条来显示控制台应用程序的进度。问题是我不知道如何在两个进程之间传递这些信息。唯一的限制是不使用数据库或文件。
【问题讨论】:
-
你有控制台的源码吗?因为我记得控制台将在最后返回绝对结果......(除非你可以“产生”结果)
-
有很多 IPC(进程间通信)选项(例如 windows 消息、邮槽、命名管道、共享内存 TCP/IP 套接字……)。为了帮助缩小范围:这两个应用程序是否总是在同一个登录会话中运行? (或者是否需要更复杂的访问控制?)
-
考虑使用 Namepd 管道在两个应用程序之间共享内存:msdn.microsoft.com/pl-pl/library/bb546085%28v=vs.110%29.aspx
-
进一步思考:为什么你有两个独立的程序?在 GUI 应用程序中以 background worker(或其他并发方法)执行处理会使事情变得很多 easier。
-
在我看来这不是将其保留为控制台应用程序的充分理由:最好是可以被其他程序引用的程序集(类库)。公开
event,以便调用者可以获取进度更新。 (管理单独的进程一开始并不难,但随着复杂程度的增加会很快变得困难:例如与父进程之间的通信越来越多。)
标签: c# winforms progress-bar console-application ipc