==================== Program.cs 文件的内容 ====================         /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        internal static void Main()
        {
            Application.EnableVisualStyles();
            Application.DoEvents();
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;            Process mainpro = RunningInstance();
            if (mainpro == null)
            {
                //mainpro的值为null 表示程序没运行
                Application.Run(new frmMain());打开指定主窗口
            }
            else
            {
                //程序已经运行
            }
        }        /// <summary>
        /// 功能:检查程序是否正在运行
         /// </summary>
        public static Process RunningInstance()
        {
            Process current = Process.GetCurrentProcess();
            Process[] processes = Process.GetProcessesByName(current.ProcessName);
            //Loop through the running processes in with the same name 
            foreach (Process process in processes)
            {
                //Ignore the current process 
                if (process.Id != current.Id)
                {
                    //Make sure that the process is running from the exe file. 
                    if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName)
                    {
                        //Return the other process instance. 
                        return process;
                    }
                }
            }
            //No other instance was found, return null. 
            return null;
        } ==================== frmMain文件的内容 ==================== 
private void frmMain_Load(object sender, EventArgs e)
{
//执行显示窗口的函数
ShowWindows();
}//显示窗口
frmWinData sw;
public void ShowWindows()
{
if (sw== null || sw.IsDisposed) sw= new frmWinData ();
sw.Show(dockPanelMain);
}
==================== 我的问题如下 ==================== 
在Program.cs文件里,如果程序没有启动,则会打开frmMain窗口,并执行ShowWindows函数.
如果程序已经启动,再次运行程序我要如何才能运行到ShowWindows函数呢?Process mainpro = RunningInstance();
if (mainpro == null)
{
//mainpro的值为null 表示程序没运行
Application.Run(new frmMain());打开指定主窗口
}
else
{
//程序已经运行
}

解决方案 »

  1.   


    internal static void Main()
    {
      ......
      frmMain frm = new frmMain();
      Process mainpro = RunningInstance();
      if (mainpro == null)
      {
        //mainpro的值为null表示程序没运行
        Application.Run(frm);//打开指定主窗口
      }
      else
      {
        //程序已经运行
        frm.ShowWindows();
      }
    }
      

  2.   

    asdf311:
    这样会打开两个frmMain窗体.我上面的问题可能描述不清楚..我再描述一次!==================== Program.cs 文件的内容 ====================         /// <summary> 
            /// 应用程序的主入口点。 
            /// </summary> 
            [STAThread] 
            internal static void Main() 
            { 
                Application.EnableVisualStyles(); 
                Application.DoEvents(); 
                System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;             Process mainpro = RunningInstance();
                if (mainpro == null)
                {
                    //程序未运行,打开登录窗口,如果登录成功则打开主窗口
                    frmLogin Loginfrom = new frmLogin();//登录窗口
                    if (Loginfrom.ShowDialog() == DialogResult.OK)
                    {
                        Application.Run(new frmMain());//登录成功后打开主窗口
                      }
                }
                else
                {
                    //当程序已经运行 我想在这里执行 frmMain 窗口里的ShowWindows函数
                }
            }         /// <summary> 
            /// 功能:检查程序是否正在运行 
            /// </summary> 
            public static Process RunningInstance() 
            { 
                Process current = Process.GetCurrentProcess(); 
                Process[] processes = Process.GetProcessesByName(current.ProcessName); 
                //Loop through the running processes in with the same name 
                foreach (Process process in processes) 
                { 
                    //Ignore the current process 
                    if (process.Id != current.Id) 
                    { 
                        //Make sure that the process is running from the exe file. 
                        if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName) 
                        { 
                            //Return the other process instance. 
                            return process; 
                        } 
                    } 
                } 
                //No other instance was found, return null. 
                return null; 
            } 
    ==================== frmMain文件的内容 ==================== private void frmMain_Load(object sender, EventArgs e) 

    //执行显示窗口函数 
    ShowWindows(); 
    } //显示窗口 
    frmWinData sw; 
    public void ShowWindows() 

    if (sw== null ¦ ¦ sw.IsDisposed) sw= new frmWinData (); 
    sw.Show(dockPanelMain); 

    ==================== 我的问题如下 ==================== 
    在Program.cs文件里,如果程序没有启动,则会打开frmMain窗口,并执行ShowWindows函数. 
    如果程序已经启动,再次运行程序我要如何才能运行到ShowWindows函数呢? 
    Process mainpro = RunningInstance();
    if (mainpro == null)
    {
     //程序未运行,打开登录窗口,如果登录成功则打开主窗口
     frmLogin Loginfrom = new frmLogin();//登录窗口
     if (Loginfrom.ShowDialog() == DialogResult.OK)
     {
      Application.Run(new frmMain());//登录成功后打开主窗口
     }
    }
    else
    {
     //当程序已经运行 我想在这里执行 frmMain 窗口里的ShowWindows函数
    }
      

  3.   

    那就把 frmMain 实例化成静态的!!!
      

  4.   


    if (mainpro == null)
    {
     //程序未运行,打开登录窗口,如果登录成功则打开主窗口
     frmLogin Loginfrom = new frmLogin();//登录窗口
     if (Loginfrom.ShowDialog() == DialogResult.OK)
     {
      Application.Run(new frmMain());//登录成功后打开主窗口
     }
    }
    else
    {
     //当程序已经运行 我想在这里执行 frmMain 窗口里的ShowWindows函数
    frmMain frm = new frmMain();
    frm.ShowWindows();
    }
      

  5.   

    4楼回答的时候,还有欠考虑~应该把frmMain写成单例
    class frmMain()
    {
      private static frmMain frm;  private frmMain()
      {
        //原有的初始化代码
      }  public static frmMain getInstance()
      {
        if (frm == null)
        {
          frm = new frmMain();
        }
        return frm;
      }
    }internal static void Main()
    {
      ......
      Process mainpro = RunningInstance();
      if (mainpro == null)
      {
        //mainpro的值为null表示程序没运行
        Application.Run(frmMain.getInstance());//打开指定主窗口
      }
      else
      {
        //程序已经运行
        frmMain.getInstance().ShowWindows();
      }
    }
      

  6.   

    asdf311兄,按你这方法还是不能执行 ShowWindows() 函数.
      

  7.   


    internal static void Main()
    {
      ......
      Process mainpro = RunningInstance();
      if (mainpro == null)
      {
        //mainpro的值为null表示程序没运行
        //Application.Run(frmMain.getInstance());//打开指定主窗口
        frmMain.getInstance().ShowWindows(); //如果这样执行,ShowWindows函数是被运行的
      }
      else
      {
        //程序已经运行
        frmMain.getInstance().ShowWindows();
      }
    }
      

  8.   

    你的意思是
    Application.Run(frmMain.getInstance());//打开指定主窗口   不执行ShowWindows函数
    还是
    //程序已经运行
    frmMain.getInstance().ShowWindows();   不执行ShowWindows函数?
      

  9.   

    问题没解决.但我找到其它的代替方法.谢谢 asdf311