如何在C#中的两个程序之间发送数据?

时间:2010-02-22 14:09:02

标签: c# wcf c#-3.0 remoting

我有两个应用程序 - > App1和App2。 App1通过使用System.Diagnostic.Process()传递一些命令行参数来打开App2。用户现在可以访问App2。

但是,当用户在App1中更改某些命令参数时,我需要打开现有的应用程序(App2)而不使用新参数关闭它。

我该怎么做?

任何反馈都会有所帮助。

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

您的目标不是直截了当。在.net中执行预先打包的方法称为Remoting,它内置于框架中并允许IPC(进程间调用)。

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

App1将参数写入文本文件(XML,Delimited,您真正的选择)。

在App2上有一个定时器,每10秒唤醒一次,并检查是否有新的参数文件。如果是这样,它会消耗它并删除文件。

<强>更新
正如John Saunders正确指出的那样,Remoting已被WCF取代,但Remoting上仍有大量信息,这可能不是一个开始的好地方。

答案 4 :(得分: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);
        }
    }
}