这就是应用程序的单例形式,很多关于都是使用进程,锁之类的方法,看着恐怖,用得也不放心。自己摸索了一个使用My关键实现单例的例子。
使用vb.net的开发环境,可以直接设置单例,而c#没有提供这种方便的设置,vb.net之所以可以这样方便,很多的功劳都是归于My关键字,c#要想使用My提供的功能,必须先引用“Microsoft.VisualBaisc”程序集。实现应用程序单例主要使用的是vb.net中的My.Application类,就算引用了“Microsoft.VisualBaisc”程序集,在c#中也没有这个类,为什么呢?因为对于My,c#引用的命名空间和vb.net不是一样的。My.Application在c#中的引用命名空间是Microsoft.VisualBaisc.ApplicationServices。
为了实现单例,需要稍微改写一下Program类。在改写之前,先添加一个MyApplication类,该类的实现如下
1 /// <summary>
2 /// WindowsFormsApplicationBase位于Microsoft.VisualBasic.ApplicationServices命名空间
3 /// 也就是My里面的
4 /// </summary>
5 public class MyApplication : WindowsFormsApplicationBase
6 {
7 public MyApplication()
8 {
9 //设置只有一个应用程序实例
10 this.IsSingleInstance = true;
11 }
12
13 protected override void OnCreateMainForm()
14 {
15 //Form1为你要启动的主窗体
16 this.MainForm = new Form1();
17
18 }
19 }
2 /// WindowsFormsApplicationBase位于Microsoft.VisualBasic.ApplicationServices命名空间
3 /// 也就是My里面的
4 /// </summary>
5 public class MyApplication : WindowsFormsApplicationBase
6 {
7 public MyApplication()
8 {
9 //设置只有一个应用程序实例
10 this.IsSingleInstance = true;
11 }
12
13 protected override void OnCreateMainForm()
14 {
15 //Form1为你要启动的主窗体
16 this.MainForm = new Form1();
17
18 }
19 }
改写一下Program类
1 static class Program
2 {
3 [STAThread]
4 static void Main(string [] args)
5 {
6
7 MyApplication app = new MyApplication();
8 app.Run(args);
9
10 }
11 }
2 {
3 [STAThread]
4 static void Main(string [] args)
5 {
6
7 MyApplication app = new MyApplication();
8 app.Run(args);
9
10 }
11 }
到此,已经大功告成,就这么简单