我目前采用如下方法控制WinForm只能有一个实例在运行(这种要求在许多场合下都会有的):
        private static bool isOpened(string formName)
        {
            foreach (Form myForm in System.Windows.Forms.Application.OpenForms)
                if (myForm.Name == formName)
                    return true;
            return false;
        }
        public static void ManageCommand(System.String unparsed)
        {
            if (!isOpened("ManageForm"))
            {
                ManageForm manageForm = new ManageForm();
                manageForm.Show();
            }
        }
不过总觉得不是最简便的方法,哪位高人指点一下:有无更简便的方法?比如设置WinForm的一个什么属性就能实现我的要求。

解决方案 »

  1.   

    我喜欢用mutex来做单实例运行
    static void Main(){bool isAppRunning = false;System.Threading.Mutex mutex = new System.Threading.Mutex(true,System.Diagnostics.Process.GetCurrentProcess().ProcessName,out isAppRunning);if (!isAppRunning){MessageBox.Show("本程序已经在运行了,请不要重复运行!");Environment.Exit(1);}else{Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new Form1());}}
      

  2.   

    楼主的意思是不是一个窗体只能被打开一次?如果是,参考如下:
    using System;namespace WFDT.MT {
        public class MT_ManageTableBizCtrlImpl {
            private ManageTableForm tblForm;        public MT_ManageTableBizCtrlImpl() { }
            public void ShowManageTableFrm() {
                if (null == tblForm || tblForm.IsDisposed) {
                    tblForm = new ManageTableForm();
                    tblForm.Show();
                } else {
                    tblForm.Activate();
                }
            }
        }
    }如果是系统只能运行一次,二楼已给出解决方法。另一种解决方法可参考:http://blog.163.com/xiaozhi797@126/blog/static/62440288200951810291301/