Solved

Application Exit Checking

Posted on 2006-11-25
4
635 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

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

Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
This article aims to explain the working of CircularLogArchiver. This tool was designed to solve the buildup of log file in cases where systems do not support circular logging or where circular logging is not enabled
Monitoring a network: how to monitor network services and why? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the philosophy behind service monitoring and why a handshake validation is critical in network monitoring. Software utilized …
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…

621 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