C#中使用My实现单例应用程序

要实现像千千静听那样的效果:也就是如果打开了千千静听,再去点击千千静听的图标,打开的还是原来的那个,而不会新开一个应用程序窗口。

这就是应用程序的单例形式,很多关于都是使用进程,锁之类的方法,看着恐怖,用得也不放心。自己摸索了一个使用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     }

改写一下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     }

到此,已经大功告成,就这么简单

原文地址:https://www.cnblogs.com/liangsunxp/p/1523115.html