Winform应用程序的单例但提供参数?
我有一个 webform(c#) 应用程序,它应该只能在单个实例中运行。同样重要的是,如果应用程序再次启动(单击应用程序图标),则新参数应转发到当前实例,但现在应用程序将启动。
我当然用谷歌搜索了这个问题并发现了这个: 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);
}
}
}
问题是我第二次尝试时要启动程序,我会在 else 中得到一个异常,即 _instance 为空?
我在这里做错了什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
.NET 程序集 Microsoft.VisualBasic.dll 包含一个名为 WindowsFormsApplicationBase。该实例也可以由 C# 应用程序使用,并且有一个名为
IsSingleInstance
的属性,可以设置该属性来实现所需的行为。在第一次应用程序启动时,您可以注册一个事件处理程序以供进一步的应用程序启动。从事件参数中,您可以提取每个附加启动的命令行参数。
请参阅此处的示例。
The .NET assembly
Microsoft.VisualBasic.dll
contains a class called WindowsFormsApplicationBase. This one can also be used by C# applications and has a property calledIsSingleInstance
, which can be set to achieve the required behaviour.At first application start you can register an event handler for further application starts. From the event args you can extract command line parameters of every additional start.
See an example here.
在本例中,它是进程间通信 (IPC),因此 _instance 没有意义。如果你想有IPC,有一些方法可以做到:socket、namepiped、messaging...
我认为有2种方法比较适合:
In this case, it's a Inter-process communication (IPC) so _instance doesn't sense. If you want to have IPC, there're some ways to do: socket, namepiped, messaging ...
I think 2 methods are suited: