BenJero
BenJero

Reputation: 11

Process.Start open too many multiple windows

I started to program a couple of months ago and I'm having hard time with Process.Start command.

In the first form I've made a timer that can set a time and opens the program, that i defined it location in my TextBox box (another vb app that i built), according to the time one enters and presses the "Set" button, when its time it opens the file that you choose.

For some reason it opens 10 multiple windows and on browsing for JPG file, it opens it only once, the multiple windows issues occurs only with .exe files.

Does anyone know the reason?

Here is my code so far:

       Public Class startup
        Dim iSetTime As Date

        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            If txtTMinute.Text <> String.Empty Then
                Clipboard.SetText(txtTMinute.Text)
            Else
                Clipboard.Clear()
            End If

            txtTSecond.Clear()
            txtTSecond.Paste()


            If (Timer1.Enabled = True) Then
                Timer1.Enabled = False
            End If

            iSetTime = txtTHour.Text + ":" + txtTMinute.Text + ":" + txtTSecond.Text

            Timer1.Enabled = True

            Label6.Text = "Timer not activated."
            Me.Refresh()
            System.Threading.Thread.Sleep(1000)
            'MessageBox.Show("Activated Succesfully")
            Label6.Text = "Timer Activated!"
            Label6.ForeColor = Color.Green
        End Sub

        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            If (TimeOfDay = iSetTime) Then

                Process.Start(TextBox1.Text)

            End If
        End Sub

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

        Using ofd As New OpenFileDialog
            ofd.Filter = "All files (*.*)|*.*"
            ofd.Title = "Select File"

            If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then
                Me.TextBox1.Text = ofd.FileName
            End If
        End Using
    End Sub

End Class

Upvotes: 0

Views: 323

Answers (2)

Afnan Makhdoom
Afnan Makhdoom

Reputation: 654

You don't use enabled = true or false , you use timer.start or timer.stop , i don't know why are you even using a timer to do this? Anywho what's happening is the timer is continously looping through the code after little intervals because IT IS A TIMER and that's what it does until you stop it. If you really want to use a timer for this task then after this line Process.Start(TextBox1.Text) use this code: Timer1.Stop By the way if you haven't changed the default interval of the timer then it would be set to 100 which is in milliseconds. it is equal to the same time as System.Threading.Thread.Sleep(100) and if you are stopping your timer after System.Threading.Thread.Sleep(1000) then it would've already looped the code: Process.Start(TextBox1.Text) 10 times because 1000/100 = 10

Upvotes: 1

Justin Ryan
Justin Ryan

Reputation: 1404

"When im browsing for JPG file, it opens it only once, only with exe it multiple it."

I'm going to guess that it's trying to open anything you tell it to 10 times, the difference is that when you open an image, it is getting displayed in a single-instance program (like Preview, or Windows Image Viewer, or whatever it happens to be called), and then "reopened" in the same viewer instance 9 more times.

Set a breakpoint at this line:

    Process.Start(TextBox1.Text)

When the breakpoint is encountered after running your application in the debugger, mouseover the two variables in the previous line, TimeOfDay and iSetTime in the IDE, and compare their values. I'd be willing to bet you're getting multiple True cases because of the implicit conversion between TimeOfDay's TimeSpan data format, and iSetTime as a Date.

Upvotes: 0

Related Questions