Solved

Wait for application to close VB.NET

Posted on 2010-08-30
10
441 Views
Last Modified: 2012-05-10
I am designing an application and I am in a very early stage of the design process but I am hoping to get some advise on the best way forward. What I need is a mechanism that will control the close-down of an application. E.g before the application starts of its sets a flag in the db like a "critical section flag=true". If the user tries to close the application while the code is in this critical section the application will wait until "critical section flag=false" before it closes down. Any suggestions on the best design approach for this?
0
Comment
Question by:jes12345
  • 2
  • 2
  • 2
  • +3
10 Comments
 
LVL 42

Expert Comment

by:sedgwick
Comment Utility
what kind of applciation are you talking about?console app? winforms?
0
 

Author Comment

by:jes12345
Comment Utility
This is not decided but probably a winform running hidden in the system tray.
0
 
LVL 44

Expert Comment

by:AndyAinscow
Comment Utility
Does the app have any user interface?

Don't forget - the user can kill tasks with the 'task manager'.  You probably wouldn't be able to stop that.
0
 
LVL 42

Expert Comment

by:sedgwick
Comment Utility
i'd create an abstract class which responsible for keeping the app alive if the critical flag is set to true which mean the app is still in critical processing.
the abstract class will inherit Form object (System.Windows.Forms) and the main form of every application will be of this type (the abstract class).
the abstract class will handle the OnFormClosing event and will check the status of the critical flag.
while the flag equals to true then do nothing, otherwise call the form base class OnFormClosing to complete the closing procedure of the main form and the application itself.
the critical processing will be taken place in other thread which upon compete it will set the critical flag.
0
 
LVL 26

Accepted Solution

by:
EDDYKT earned 125 total points
Comment Utility
0
Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

 
LVL 17

Expert Comment

by:nepaluz
Comment Utility
handle the Main Form closing event and populate with your code:

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

    'handle your routine to test here

End Sub

Open in new window

0
 

Author Comment

by:jes12345
Comment Utility
I have believe I have sketched out a possible solution. Any comments?
Public Class Form1



    Friend WithEvents BackgroundWorker1 As System.ComponentModel.BackgroundWorker



    Private Sub form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing



        While True

            If System.IO.File.Exists("EXIT_OK.txt") Then

                System.Environment.Exit(0)

            End If

        End While



    End Sub



    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        My.Computer.FileSystem.DeleteFile("EXIT_OK.txt")

        Me.BackgroundWorker1 = New System.ComponentModel.BackgroundWorker

    End Sub



    Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork



        For i As Integer = 0 To 500

            Debug.WriteLine(CStr(i))

            System.Threading.Thread.Sleep(10)



            If i = 500 Then

                My.Computer.FileSystem.WriteAllText("EXIT_OK.txt", "", False)

            End If

        Next

    End Sub



    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        BackgroundWorker1.RunWorkerAsync()

    End Sub

End Class

Open in new window

0
 
LVL 44

Assisted Solution

by:AndyAinscow
AndyAinscow earned 125 total points
Comment Utility
Try to kill it with the task manager - does that get around your method?
0
 
LVL 17

Assisted Solution

by:nepaluz
nepaluz earned 125 total points
Comment Utility
I believe you have to hold the "Form Closing" position till you are thru. Something like firing off a BGWorker from there would do the job.

As it stands, I believe your app will exit notwithstanding.
0
 
LVL 11

Assisted Solution

by:ladarling
ladarling earned 125 total points
Comment Utility
That wouldnt work....
You have to set the cancel flag of the FormClosingEventArgs object like:
e.Cancel = True
And instead of testing for a file system object or another flag (especially one thats generated out of the control of the UI Thread)  you could more easily test for the workers .IsBusy property and then handle the backgroundworker.RunWorkerCompleted event.
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

771 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

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now