Process.Start打开太多多个窗口

时间:2014-10-14 05:24:25

标签: vb.net

几个月前我开始编程,而且我很难使用Process.Start命令。

在第一种形式中,我制作了一个可以设置时间并打开程序的计时器,我在我的TextBox框中定义了它的位置(我构建的另一个vb应用程序), 根据输入的时间并按下“设置”按钮,当它打开您选择的文件时。

由于某种原因,它会打开10个多窗口,在浏览JPG文件时,它只打开一次,多个窗口问题只发生.exe文件。

有谁知道原因?

到目前为止,这是我的代码:

       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

2 个答案:

答案 0 :(得分:1)

你没有使用enabled = true或false,你使用timer.start或timer.stop,我不知道为什么你甚至使用计时器来做这个?无论发生了什么,计时器都会在一小段时间后不断循环遍历代码,因为它是一个定时器,直到你停止它为止。如果您真的想为此任务使用计时器,那么在此行Process.Start(TextBox1.Text)之后使用此代码:Timer1.Stop 顺便说一下,如果你没有改变定时器的默认间隔,那么它将被设置为100,以毫秒为单位。它等于System.Threading.Thread.Sleep(100)的同一时间,如果你在System.Threading.Thread.Sleep(1000)之后停止计时器,那么它已经循环了代码:Process.Start(TextBox1.Text) 10次因为1000/100 = 10 < / p>

答案 1 :(得分:0)

  

&#34;当我浏览JPG文件时,它只打开一次,只有exe   它是多重的。&#34;

我猜它试图打开你告诉它的任何东西10次,不同的是当你打开一个图像时,它会显示在一个单实例程序中(比如预览,或Windows图像查看器,或任何它恰好被称为),然后&#34;重新打开&#34;在同一个查看器实例中9次。

在此行设置断点:

    Process.Start(TextBox1.Text)

在调试器中运行应用程序后遇到断点时,将鼠标移到IDE中上一行TimeOfDayiSetTime中的两个变量,并比较它们的值。由于TimeOfDay的TimeSpan数据格式和iSetTime作为日期之间的隐式转换,我愿意打赌您获得多个True案例。