Solved

Application Exit Checking

Posted on 2006-11-25
4
631 Views
Last Modified: 2010-05-18
HI,
I am having an issue with a couple of methods in my program.

Is there a way I can check and see if any of these threads are running and if not the software goes by it without crashing?
   
EC0-EC270 are programs

EC4-EC7 are forms off of the main

    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (EC0 != null)
                EC0.Kill();
            if (EC90 != null)
                EC90.Kill();
            if (EC180 != null)
                EC180.Kill();
            if (EC270 != null)
                EC270.Kill();
            if (ec4 != null)
                ec4.Close();
            if (ec5 != null)
                ec5.Close();
            if (ec6 != null)
                ec6.Close();
            if (ec7 != null)
                ec7.Close();
        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
           
            if (EC0 != null)
                EC0.Kill();
            if (EC90 != null)
                EC90.Kill();
            if (EC180 != null)
                EC180.Kill();
            if (EC270 != null)
                EC270.Kill();
            if (ec4 != null)
                ec4.Close();
            if (ec5 != null)
                ec5.Close();
            if (ec6 != null)
                ec6.Close();
            if (ec7 != null)
                ec7.Close();

            Application.Exit();
        }

        private void resetApplicationToolStripMenuItem_Click(object sender, EventArgs e)
        {
           
            if (EC0 != null)
                EC0.Kill();
            if (EC90 != null)
                EC90.Kill();
            if (EC180 != null)
                EC180.Kill();
            if (EC270 != null)
                EC270.Kill();
            if (ec4 != null)
                ec4.Close();
            if (ec5 != null)
                ec5.Close();
            if (ec6 != null)
                ec6.Close();
            if (ec7 != null)
                ec7.Close();

            Application.Restart();
        }
0
Comment
Question by:schenkp
  • 2
  • 2
4 Comments
 
LVL 18

Expert Comment

by:Ravi Singh
ID: 18013080
Hi, not sure on what you exactly mean - can you explain further please? although, one modification that I would make is to encapsulate that common code into a seperate method so that you only need to change the code in one location in the future:

private void KillAndStuff()
{
            if (EC0 != null)
                EC0.Kill();
            if (EC90 != null)
                EC90.Kill();
            if (EC180 != null)
                EC180.Kill();
            if (EC270 != null)
                EC270.Kill();
            if (ec4 != null)
                ec4.Close();
            if (ec5 != null)
                ec5.Close();
            if (ec6 != null)
                ec6.Close();
            if (ec7 != null)
                ec7.Close();
}
0
 

Author Comment

by:schenkp
ID: 18014376
Hi Zepher,
ECO, EC90, EC180, and EC270 are real programs that get launched when the user click on a button on the main program.

There path is C:\program files\mysuff\ECO.exe, etc

EC4, EC5, EC6, and EC7 are all forms that get launched from the main program when a user click on the same button.

What happens is the user makes a choice and EC0, EC4, and EC90 are launched (for example) so now we have the main program, one form( EC4)  and 2 external programs (EC0, EC90) are running.   No i have a timer that executes and usess StuffandKill();  

EC0, EC4, and EC90 all close down they way they should, but after this if the user clicks on any of these methods

Appliation.Ext();
KillAndStuff()


Application.Rest();
KillAndStuff()

Form_closed();
KillAndStuff()


The application throws up and exception and says that EC0;

System.InvalidOperationException was unhandled
  Message="Cannot process request because the process has exited."
  Source="System"
  StackTrace:
       at System.Diagnostics.Process.GetProcessHandle(Int32 access, Boolean throwIfExited)
       at System.Diagnostics.Process.Kill()
       


So i was thinking that maybe the KillandStuff() methode needs a little error checking or something?



0
 
LVL 18

Accepted Solution

by:
Ravi Singh earned 500 total points
ID: 18014400
Hi, thanks for clarifying... you can check if a process has exited by using the HasExited property, so your Kill() calls should only execute if the Process object is not null and the process has not already exited:

if (EC0 != null && !EC0.HasExited)
    EC0.Kill();
...

I don't think calling Close() on an already closed or disposed Form object should cause a problem...
0
 

Author Comment

by:schenkp
ID: 18014541
Thanks,

Works great:)
0

Featured Post

Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In order to hide the "ugly" records selectors (triangles) in the rowheaders, here are some suggestions. Microsoft doesn't have a direct method/property to do it. You can only hide the rowheader column. First solution, the easy way The first sol…
Summary: Persistence is the capability of an application to store the state of objects and recover it when necessary. This article compares the two common types of serialization in aspects of data access, readability, and runtime cost. A ready-to…
Along with being a a promotional video for my three-day Annielytics Dashboard Seminor, this Micro Tutorial is an intro to Google Analytics API data.
This video shows how to use Hyena, from SystemTools Software, to bulk import 100 user accounts from an external text file. View in 1080p for best video quality.

776 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question