码迷,mamicode.com
首页 > 其他好文 > 详细

c#设计应用程序单实例运行

时间:2014-09-03 09:37:36      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   io   ar   for   art   div   

利用WindowsFormsApplicationBase的IsSingleInstance来控制应用程序只能单实例运行。

[DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)]
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);

static SingleInstanceManager manager;
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    manager = new SingleInstanceManager(new Form5());
    manager.Run(args);
}

public static void ShowForm(Form Nform, bool closeOldOne = true)
{
    manager.ChangeForm(Nform, closeOldOne);
}

public class SingleInstanceManager : WindowsFormsApplicationBase
{
    ApplicationContext app;

    public SingleInstanceManager(Form mainForm)
    {
        this.IsSingleInstance = true;
        app = new ApplicationContext();
        app.MainForm = mainForm;
    }

    protected override bool OnStartup(Microsoft.VisualBasic.ApplicationServices.StartupEventArgs e)
    {
        Application.Run(app);
        return false;
    }

    protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)
    {
        base.OnStartupNextInstance(eventArgs);
        SetForegroundWindow(app.MainForm.Handle);
        ShowWindow(app.MainForm.Handle, 4);
    }

    public void ChangeForm(Form newForm, bool closeOldOne = true)
    {
        if (app.MainForm == newForm) return;
        Form tem = app.MainForm;
        tem.Hide();
        app.MainForm = newForm;
        newForm.Show();
        if (closeOldOne) tem.Close();
    }
}

单实例的类中有一个变量ApplicationContext,应用程序线程的上下文,这个变量是为了切换窗口而设计的。具体实现代码看下面的ChangeForm。

调用时,例如上面的Form5中有一个按钮,打开新窗口Form6,则:

private void button1_Click(object sender, EventArgs e)
{
    Program.ShowForm(new Form6());
}

只需要这样调用就能够切换窗口,关闭Form5,节约资源。

c#设计应用程序单实例运行

标签:style   blog   color   os   io   ar   for   art   div   

原文地址:http://www.cnblogs.com/icyJ/p/SingleInstance.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!