我有两个独立的程序,一个是控制台应用程序,另一个是Windows应用程序。
我的Windows应用程序:
其中一个名为" research"的按钮:当我点击它时,我用这行代码启动控制台应用程序:
string strResult = ProcessHelper.LaunchProcessWaitForPipedResult("MyExecFile.exe", strArguments, 10 * 60 * 1000, true); // 10 mins max
我的控制台应用程序:
我的问题:
我想在Windows应用程序上创建一个进度条,以显示控制台应用程序的进度。问题是我不知道如何在这两个进程之间传递这些信息。唯一的限制是不使用数据库或文件。
答案 0 :(得分:2)
鉴于同一用户会话中有两个进程,并且希望避免在该会话之外进行任何通信,我会看三个选项:
父进程使用随机名称创建命名管道(并通过打开它来确认该名称未被使用)。它将该名称传递给子进程。使用一个简单的协议,允许孩子发送更新。
要克服许多挑战:
在这种情况下,对象的名称默认情况下是会话的本地名称。默认情况下,这更安全。
父进程创建了足够大量的共享内存(用于简单的进度更新:不多),互斥锁和事件。
然后,当GUI进入互斥锁并读取共享内存的内容时,父进程与GUI同时等待事件发出信号。然后它取消设置事件并离开互斥锁。
与此同时,为了发送更新,孩子会在离开互斥锁之前进入互斥锁,更新和内存并设置事件。
这里的挑战包括:
我可能会首先查看命名管道(或者如果我想要更大的灵活性,可能是自定义WMI类型)。 但是 我会在尝试所有内容后首先避免需要多个进程。一个共享库以及其他人的控制台包装器,而我直接使用该库将是一个更容易的选择。