我有两个应用程序 - > App1和App2。 App1通过使用System.Diagnostic.Process()传递一些命令行参数来打开App2。用户现在可以访问App2。
但是,当用户在App1中更改某些命令参数时,我需要打开现有的应用程序(App2)而不使用新参数关闭它。
我该怎么做?
任何反馈都会有所帮助。
答案 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);
}
}
}