c#程序如何实现单例模式
如题,现在程序是做好了,但可以开多个,怎么限制启动只能开一个!如果有一个再运行了,再开,需要把第一个启动着的从任务栏里还原出来,不要报错或者其他信息,可以做到么?...
如题,现在程序是做好了,但可以开多个,怎么限制启动只能开一个!如果有一个再运行了,再开,需要把第一个启动着的从任务栏里还原出来,不要报错或者其他信息,可以做到么?
展开
展开全部
你这个需求靠单例模式是无法实现的,必须依靠系统方法才能做到
通过下面的方法可以查找到当前开启了几个进程,如果发现得到的结果大于1,就说明你要找的那个程序已经跑起来了,这个时候直接退出就好了
我的例子是WPF程序的,WindowsForm也才不多啦,而且会更简单
namespace Test
{
/// <summary>
/// App.xaml 的交互逻辑
/// </summary>
public partial class App : Application
{
public App()
: base()
{
Startup += new StartupEventHandler(App_Startup);
}
private void App_Startup(object sender, StartupEventArgs e)
{
int times = 0;
bool isRun = false;
while (times < 5)
{
System.Diagnostics.Process[] tmp = System.Diagnostics.Process.GetProcessesByName("你的应用程序的进程名称");
if (tmp.Length > 1)
{
System.Threading.Thread.Sleep(1000);
isRun = true;
times++;
}
else
{
isRun = false;
break;
}
}
if (isRun)
{
this.Shutdown();
}
}
}
}
这个例子是从我以前的程序里面摘出来的,你可能看着不太清楚,关键的一句是这个:
System.Diagnostics.Process[] tmp = System.Diagnostics.Process.GetProcessesByName("你的应用程序的进程名称");//查找当前有几个指定名称的进程
另外你说需要把第一个启动着的从任务栏里还原出来,这个得看你是怎么把程序是怎么个情况,一般都可以通过WinAPI实现的
通过下面的方法可以查找到当前开启了几个进程,如果发现得到的结果大于1,就说明你要找的那个程序已经跑起来了,这个时候直接退出就好了
我的例子是WPF程序的,WindowsForm也才不多啦,而且会更简单
namespace Test
{
/// <summary>
/// App.xaml 的交互逻辑
/// </summary>
public partial class App : Application
{
public App()
: base()
{
Startup += new StartupEventHandler(App_Startup);
}
private void App_Startup(object sender, StartupEventArgs e)
{
int times = 0;
bool isRun = false;
while (times < 5)
{
System.Diagnostics.Process[] tmp = System.Diagnostics.Process.GetProcessesByName("你的应用程序的进程名称");
if (tmp.Length > 1)
{
System.Threading.Thread.Sleep(1000);
isRun = true;
times++;
}
else
{
isRun = false;
break;
}
}
if (isRun)
{
this.Shutdown();
}
}
}
}
这个例子是从我以前的程序里面摘出来的,你可能看着不太清楚,关键的一句是这个:
System.Diagnostics.Process[] tmp = System.Diagnostics.Process.GetProcessesByName("你的应用程序的进程名称");//查找当前有几个指定名称的进程
另外你说需要把第一个启动着的从任务栏里还原出来,这个得看你是怎么把程序是怎么个情况,一般都可以通过WinAPI实现的
展开全部
很简单:
public class Form
{
private static Form instance=null;
private Form(){}
public static Form GetInstance()
{
return instance==null?new Form():instance;
}
}
在实例化窗口的时候,不要使用构造函数
//不用Form form1=new Form();
//使用如下
Form form1=Form.GetInstance();
public class Form
{
private static Form instance=null;
private Form(){}
public static Form GetInstance()
{
return instance==null?new Form():instance;
}
}
在实例化窗口的时候,不要使用构造函数
//不用Form form1=new Form();
//使用如下
Form form1=Form.GetInstance();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询