我的小应用程序存在严重问题;基本上,这很容易理解:
打开我的软件后,事情就完成了。
我想集中精力打开另一个实例(我的意思是再次打开.exe),检查它是否已经打开。如果不是简单地启动应用程序,而是已经运行了(又是第二个或更多实例),则“简单地”将输入参数(args字符串数组)传递给第一个实例,这将对它进行适当的处理。
这是我的program.cs
static class Program
{
static Mutex mutex = new Mutex(true, "{blabla}");
[STAThread]
static void Main(String[] args)
{
if (mutex.WaitOne(TimeSpan.Zero, true))
{
//First Instance!
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
CALL A MY STATIC METHOD, DO SOME THINGS
Application.Run(new Form1());
}
finally
{
mutex.ReleaseMutex();
}
}
else
{
//Not-so-first instance!
CALL A STATIC METHOD,
DO OTHER THINGS LIKE COMUNICATE WITH FIRST INSTANCE
SIMPLY CLOSE.
}
}
}
这只会识别(使用互斥锁)是否已经打开,但是(偏离路线)它无法与主实例进行任何通信。
我已经尝试了很多东西,但是无法正常工作。
我已经尝试过了,但是在浪费大量时间之后,我真的不明白如何放置我的“第一次”代码和“已经运行”的代码。
也尝试过MSMQ,但我无法使其正常工作。
有人可以帮帮我吗?这是一个基本的软件,可做非常基本的事情,但是我花了一天的时间才能使其按我的意愿工作!
最简单的通信方式之一是将Windows消息从第二个实例发送到第一个实例。第二个实例将使用PostMessage发送消息,而第一个实例将覆盖Form1的WndProc方法来处理消息。
这里有一个示例:向Windows进程(不是其主窗口)发送消息
该问题还有一个答案,该答案使用管道(和WCF)进行通信。
进程间通信的形式很多。您使用哪一个取决于您的需求,例如Windows消息不能承载大量信息,而管道可以以非常高的速度传输数据。
更新一个简单的替代方法可以是IPCChannel。这使您可以在第一个实例中创建一个可以由第二个实例调用的对象。您可以在该对象上创建方法并将数据作为参数传递
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句