程序中有几个线程,在遇到某种情况下,想用程序实现:先关闭应用程序,再重新启动。在这里,我调用的是 Application.Restart();  现在的情况是,只要一执行这句话,程序中的有些功能就实现不了了,我怀疑是调用Application.Restart(); 的瞬间,有些资源可能没有完全释放。我不知道要怎么修改了。想用程序代码实现,谢谢各位大虾~~

解决方案 »

  1.   

    程序中有几个线程,我是先释放了线程所占用的资源,再杀死线程,最后调用这个的Application.Restart();为什么还是不行啊?
     Process[] allProcess = Process.GetProcesses();
                foreach (Process p in allProcess)
                {                for (int i = 0; i < p.Threads.Count; i++)
                    {
                        p.Threads[i].Dispose();
                        p.Kill();
                    }
                    
                }
      

  2.   

    能否保存下当前运行状态,重启后reload当前状态?
      

  3.   

    我觉得不用保存吧,想用程序实现:关闭应用程序,重新启动。(类似于手动的去关闭FORM,然后再重启应用程序)
      

  4.   

    我觉得不用保存吧,想用程序实现:关闭应用程序,重新启动。(类似于手动的去关闭FORM,然后再重启应用程序)
      

  5.   

    调用另外一个EXE,然后把自己关闭。在那个EXE里延迟2秒调用这个EXE
      

  6.   

    正解在此:
                        Process p = new Process();
                        p.StartInfo.FileName = Application.ExecutablePath;
                        p.Start();
                        this.Close();
      

  7.   

    或者:
    Process p = new Process();
    p.StartInfo.FileName = Application.ExecutablePath;
    p.Start();
    Application.Exit();
      

  8.   

    Application.Restart(); 可以阿,有什么问题,关于资源释放,如果是.net的GC能处理的,就应该没有问题。。
    如果是有调用到flash之类的,在构造函数的地方,作一下重载入。。
      

  9.   


    实在关闭不了,就手动杀掉本程序,如下:
                    proc = Process.GetProcessesByName("Program");//Program就是你的程序名称
                    Process p = new Process();
                    p.StartInfo.FileName = Application.ExecutablePath;
                    p.Start();
                    foreach (Process PR in proc)
                    {
                        PR.Kill();
                    }
      

  10.   

    proc = Process.GetProcessesByName("Program");//Program不是程序名称,是进程的名称啊Process p = new Process();
    p.StartInfo.FileName = Application.ExecutablePath;
    p.Start();
    foreach (Process PR in proc)
    {
    PR.Kill();
    }
      

  11.   

    实在关闭不了,就手动杀掉本程序,如下:
    proc = Process.GetProcessesByName("Program");//Program不是程序名称,应该是进程名称啊
    Process p = new Process();
    p.StartInfo.FileName = Application.ExecutablePath;
    p.Start();
    foreach (Process PR in proc)
    {
    PR.Kill();
    }
      

  12.   

    如果手动的运行应用程序(EXE文件),可以正常启动应用程序啊,但是调用了这个后,不能正常启动了,出错了~  
    我之前的Application.Restart(); 还可以正常重启,只是里面的功能有的实现不了了。
      

  13.   

    以下是我重启的处理函数:           private void restart()
            {
                string strAppFileName = Process.GetCurrentProcess().MainModule.FileName;
                Process myNewProcess = new Process();
                myNewProcess.StartInfo.FileName = strAppFileName;            myNewProcess.StartInfo.WorkingDirectory = Application.ExecutablePath;
                myNewProcess.Start();
                
                Process[] allProcess = Process.GetProcesses();
                foreach (Process p in allProcess)
                {                for (int i = 0; i < p.Threads.Count; i++)
                    {
                        p.Threads[i].Dispose();
                        p.Kill();
                    }
                    
                }
    base.Dispose(true);//释放由system.windows.forms.form占用的资源(内存除外)
    }
      

  14.   

    你新建一个项目,写一个专门运行程序的exe,在exe的参数里面,加上运行程序的路径外带开始运行的等待时间,ok了,你那个程序在需要重启的时候,按楼上说的,先调用这个新建的exe,再关闭掉你自己的程序,等待时间一到,新exe将你原有的程序启动一下.
      

  15.   

    定义一个全局变量,用于控制各线程的运行状态
    线程运行代码中加条件,根据控制状态,决定是否正常结束.先通过改变全局变量,结束线程,再执行Application.Restart();
      

  16.   

    就像我上面的代码,先杀死了进程后,再执行Application.Restart();,为什么不行啊?  好像是杀死了自己后,应用程序启不来了~