2010-02-22 41 views
2

我有两个应用程序 - > App1和App2。 App1通过使用System.Diagnostic.Process()传递一些命令行参数来打开App2。用户现在访问App2。如何在C#中的两个程序之间发送数据?

然而,当用户更改应用1一些命令参数,我需要在不使用新的参数关闭它打开现有aplication(应用)。

我该怎么做?

任何反馈意见将有帮助。

+5

我并不是要变得聪明或粗鲁,而是标点符号是你的朋友。在上一个陈述中看到,我用了一个apostraphy,一个逗号和一个句号来帮助澄清我的意思。当他们不需要花时间研究你所要求的内容时,人们更愿意提供帮助。 –

+2

是的,标点符号是你的朋友,不要粗鲁,但不是每个人都以英语作为第一语言。 –

+0

您应该尝试更新问题标题,比如说“我如何在C#中的两个程序之间发送参数?”对于看到你的问题的人来说,知道它是怎么回事会有很多帮助。 – Danny

回答

4

您应该使用IPC。有关有用的链接,请参阅IPC Mechanisms in C# - Usage and Best Practices

+0

从技术上讲,你重申了原来的问题,因为IPC *是两个不同进程之间的通信。通过你的链接,很明显你指的是带有WCF的IPC,这是解决这个问题的好办法。 –

0

什么你希望做的是不是直线前进。在.net中预先打包的方式称为Remoting,它内置在框架中并允许IPC(进程间调用)。

根据您的经验水平,你可能会更好滚动这个你自己的简化版本。例如有两个程序使用文件传递数据。

应用1将参数写入到一个文本文件(XML,分隔符,你的选择真的)。

对App2的一个计时器,唤醒第二的每10个和检查,看看是否有新的参数文件。如果是这样,它会消耗它并删除文件。

UPDATE
作为正确地指出了由约翰·桑德斯,远程处理已被WCF superseeded,但是仍然有大量的信息在那里对Remoting的,它可能不上手不好的地方。

+0

实际上,远程处理已被弃用,以支持WCF。 –

+0

@John:是的,我似乎记得正在宣布。为什么我从来没有邀请这些会议作出这些决定?这可能是一些过度劳累的微软小伙子的疏忽,或者不久之后,所有那些过时的邀请都会发现我并涌入我的邮箱。 。 。现在的任何一天。 。 。 –

+0

我相信WCF的学习曲线有些陡峭,但是期望的协议看起来非常简单,应该有类似简单通信的良好示例代码。 –

5

另一种选择可能是一个基于WCF的解决方案。 见WCF Chat Sample

+0

+1,因为在当前版本的.Net上,WC​​F是做IPC时的选择。 –

0

我会去与WindowsFormsApplicationBase类(从Microsoft.VisualBasic装配)用下面的代码在我Program.cs文件:

using System; 
using System.Windows.Forms; 
using Microsoft.VisualBasic.ApplicationServices; 

namespace TestSolution 
{ 
    sealed class Program : WindowsFormsApplicationBase 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main(string[] commandLine) 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 

      var program = new Program() 
      { 
       IsSingleInstance = Properties.Settings.Default.IsSingleInstance 
      }; 

      // Here you can perform whatever you want to perform in the second instance 

      // After Program.Run the control will be passed to the first instance  
      program.Run(commandLine); 
     } 

     protected override void OnCreateMainForm() 
     { 
      MainForm = new ImportForm(); 
     } 

     protected override bool OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs) 
     { 
      // This code will run in the first instance 

      return base.OnStartupNextInstance(eventArgs); 
     } 
    } 
} 
1

为什么不普通的旧的TCP/IP使用套接字(客户端和服务器)。

相关问题