【问题标题】:2 Console applications running in different threads2 在不同线程中运行的控制台应用程序
【发布时间】:2012-11-27 22:25:48
【问题描述】:

我将如何做到这一点,以便我拥有一个带有后台进程的主程序,该进程“侦听”捕获(例如通过类似 sendDebugInfo(Exception e) 的函数),然后取消隐藏第二个控制台并显示消息,但如果用户关闭调试窗口并没有退出程序。

如果以上不够清楚,这里是一个简单的版本:

使用控制台应用程序 1 函数 helloWord() 控制台应用程序 1 函数 helloWorld() 将字符串发送到第二个控制台窗口(但在同一个项目中) 第二个控制台显示“hello world”。

【问题讨论】:

  • 异常可能无法在进程之间很好地传播。
  • 异常是通过字符串发送的。
  • 您是否有一个带有 2 个控制台窗口的进程(不确定是否可能...)或 2 个以上的每个带有控制台窗口的进程?
  • @JordanTrainor - 序列化异常是否提供对内部异常和其他上下文(例如调用堆栈)的访问,或者您只是想在其他地方显示一些文本?

标签: c# .net console


【解决方案1】:

您实际上是在询问进程间通信 (IPC)。

有很多方法可以实现IPC。我建议你看看命名管道。它们易于使用且非常可靠。

http://msdn.microsoft.com/en-us/library/system.io.pipes.aspx

命名管道背后的基本思想是你有一个命名资源,你可以在一个进程中写入消息并从另一个进程中读取消息。消息可以是任何你想要的。进程只需使用预先约定的名称即可连接到管道。

【讨论】:

    【解决方案2】:

    只是为了澄清,说您希望两个控制台应用程序在不同的线程中运行有点误导。控制台应用程序通常完全在不同的进程上运行,并且由于进程之间不共享线程,因此两个控制台应用程序在不同的线程中运行是常态。但是,当您明确地说出这句话时,听起来您正试图在同一个 进程 上运行它们,但我什至不确定是否有可能在不同的线程上运行它们。

    也就是说,Eric J. 是对的,您似乎真的在询问可以通过多种方式执行的 IPC。命名管道是一种方式,而 TCP 环回是另一种方式。如果您希望这些应用程序在某些时候在不同的机器上运行,您将需要使用 TCP。否则命名管道更容易处理。

    我建议阅读 IPC,找出适合您需求的方法并尝试使其发挥作用。当您遇到“我的消息未通过”之类的特定问题时,您应该返回并搜索类似问题或创建一个新问题。

    【讨论】:

      猜你喜欢
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      相关资源
      最近更新 更多