Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

Closing Thread

Posted on 2010-11-30
2
Medium Priority
?
491 Views
Last Modified: 2012-05-10
In below code, the code continues to execute inspite of application.exit and gives error Invoke or BeginInvoke cannot be called on a control until the window handle has been created.. How do I make sure application exits where the code is written for exit ?
 private void ClubCentricUpdater_Load(object sender, EventArgs e)
        {
            flashLabel.Text = @"Downloading Updates. Please Wait";
            lblsupport.Text = @"Problems, if any, please contact IT Support";
            ThreadStart ts = delegate
                                 {
                                     try
                                     {
                                         bool version = FileCompare(Comparesourcefile,
                                                                    Comparedestinationfile);
                                         if (version)
                                         {
                                             //Exit this application and open the desired application
                                             var rundesiredprocess = new Process();
                                             rundesiredprocess.StartInfo.FileName =
                                                 desiredapplication;
                                             rundesiredprocess.Start();
                                             
                                             CloseForm(this);
                                             Application.Exit();
                                         }
                                         FindAndKillProcess("notepad");
                                         filePaths = Directory.GetFiles(sourcepath, "*.*",
                                                                        SearchOption.AllDirectories);
                                         Invoke(new MethodInvoker(delegate
                                                                      {
                                                                          progressBar.Maximum =
                                                                              filePaths.Length;
                                                                          progressBar.Step = 1;
                                                                      }));
                                         const int bufferSize = 32*1024; //buffer
                                         foreach (string filelist in filePaths)
                                         {
                                             var file = new FileInfo(filelist);
                                             string fileDirectory = file.DirectoryName;
                                             string filename = file.Name;
                                             var stringSeparators = new[] {sourcepath};
                                             string[] result = fileDirectory.Split(
                                                 stringSeparators, StringSplitOptions.None);
                                             int filedirectorycount = result.Length;
                                             string directoryname = "";
                                             if (filedirectorycount == 2)
                                             {
                                                 directoryname = result[1] + "\\";
                                             }
                                             CopyFile(filelist,
                                                      destinationpath + directoryname +
                                                      filename,
                                                      directoryname, bufferSize);
                                             Invoke(
                                                 new MethodInvoker(
                                                     () => progressBar.PerformStep()));
                                         }
                                         Invoke(
                                             new MethodInvoker(
                                                 delegate
                                                     {
                                                         flashLabel.Text =
                                                             @"                  Completed";
                                                     }));
                                     }
                                     catch (Exception)
                                     {
                                         Invoke(new MethodInvoker(delegate
                                                                      {
                                                                          flashLabel.Text =
                                                                              @"The network path was not found.";
                                                                          return;
                                                                      }));
                                     }
                                 };
            var th = new Thread(ts);
            th.Start();
        }
0
Comment
Question by:GRChandrashekar
2 Comments
 

Author Comment

by:GRChandrashekar
ID: 34239221
and cllose method I have written this

 private static void CloseForm(Form form)
        {
            if (form.IsDisposed) return;
            if (form.InvokeRequired)
            {
                CloseMethod method = CloseForm;
                form.Invoke(method, new object[] {form});
            }
            else
            {
                form.Close();
            }
        }

        #region Nested type: CloseMethod

        private delegate void CloseMethod(Form form);

        #endregion
0
 
LVL 16

Accepted Solution

by:
kris_per earned 2000 total points
ID: 34239949

Try adding 'return' after Application.Exit.

...
    CloseForm(this);
   Application.Exit();
   return;
}
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

This article describes a simple method to resize a control at runtime.  It includes ready-to-use source code and a complete sample demonstration application.  We'll also talk about C# Extension Methods. Introduction In one of my applications…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
With just a little bit of  SQL and VBA, many doors open to cool things like synchronize a list box to display data relevant to other information on a form.  If you have never written code or looked at an SQL statement before, no problem! ...  give i…
Kernel Data Recovery is a renowned Data Recovery solution provider which offers wide range of softwares for both enterprise and home users with its cost-effective solutions. Let's have a quick overview of the journey and data recovery tools range he…

572 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