我有一个webform(c#)应用程序,它只能在单个实例中运行。同样重要的是,如果再次启动应用程序(单击应用程序图标),则应将新参数转发到当前实例,但现在应用程序将启动。
我有问题google问题并发现:http://www.sanity-free.com/143/csharp_dotnet_single_instance_application.html
到目前为止,这是我设置的方式:
public class MyApp : ApplicationContext
{
private static MyApp _instance;
private static Mutex _mutex = new Mutex(true, "{8F6F0AC4-B9A1-45fd-A8CF-72F04E6BDE8F}");
[STAThread]
public static void Main(string[] args)
{
MyParams params;
params = ExtractParams(args);
if (_mutex.WaitOne(TimeSpan.Zero, true))
{
_instance = new MyAppp(params);
Application.Run(_instance);
}
else
{
_instance.SetParameters(params);
}
}
}
这个问题是我第二次尝试启动程序时,我会在_instance为null的else中得到一个异常吗?
我在这里做错了什么?
答案 0 :(得分:2)
.NET程序集Microsoft.VisualBasic.dll
包含一个名为WindowsFormsApplicationBase的类。这个也可以被C#应用程序使用,并且有一个名为IsSingleInstance
的属性,可以设置它来实现所需的行为。
首次启动应用程序时,您可以注册事件处理程序以进一步启动应用程序。从事件args中,您可以提取每个额外启动的命令行参数。
查看示例here。
答案 1 :(得分:1)
在这种情况下,它是一个进程间通信(IPC),所以_instance没有意义。如果你想拥有IPC,还有一些方法可以做:socket,namepiped,messaging ......
我认为有两种方法适合: