1

在我的应用程序中,我允许用户从打开的文件对话框中添加程序,然后将项目添加到列表视图并将项目位置保存到标签中。所以我想做的是当列表视图中的程序被选中并按下按钮时,它启动一个计时器,这个计时器检查进程是否正在运行,如果它没有启动进程,一次进程启动它获取进程的窗口标题并将其发送到另一个表单上的文本框。

编辑:问题是如果有人能看到它为什么不工作,我的意思是启动进程,然后当它开始关闭表单并将进程窗口标题添加到另一个表单上的文本框时。我试图让它工作,但我做不到。我知道它获得的进程名称是正确的我认为我的问题与我的 for 循环有关。基本上它现在没有做任何可见的事情。

我觉得我的代码非常接近,我希望它只需要一些小的调整。任何帮助,将不胜感激。抱歉,如果我的编码实践不是那么好,我对此很陌生。

**编辑:我找到了解决方案。我向按钮添加了代码,使我的计时器能够执行该过程。另一个问题确实是它读取文件的方式,我不得不使用替换功能从文件路径代码中删除“.exe”。

编辑 2:Mark Hall 发布了一个更好的解决方案。我现在正在使用他的代码,因为它出错的可能性较小。

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
       Dim s As String = ListView1.SelectedItems(0).Tag
    Dim myFile As String = Path.GetFileName(s)
    Dim mu As String = myFile.Replace(".exe", "").Trim()
    Dim f As Process
    Dim p As Process() = Process.GetProcessesByName(mu)

    For Each f In p
        If p.Length > 0 Then
            For i As Integer = 0 To p.Length - 1
                ProcessID = (p(i).Id)
                AutoMain.Name.Text = f.MainWindowTitle
                Timer1.Enabled = False
                Me.Close()
            Next
        Else
            ProcessID = 0
            End If
        If ProcessID = 0 Then
            Process.Start(mu)
        End If
    Next
    End Sub
4

1 回答 1

0

正在发生的事情是,您在进入 For Each 循环之前正在寻找与您的参数匹配的 Process 数组是空的,因此它永远不会进入它,因此您永远不会启动您的流程。

这是一个非常简单的例子:

Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    Dim s As String = ListView1.SelectedItems(0).Tag.ToString
    Dim myFile As String = Path.GetFileName(s)

    Dim p As Process() = Process.GetProcessesByName(Path.ChangeExtension(myFile, Nothing))
    Static started As Boolean

    If p.Count > 0 Or started Then
        If p.Length > 0 Then
            For i As Integer = 0 To p.Length - 1
                ProcessId = (p(0).Id)
                AutoMain.Name.Text = p(0).MainWindowTitle
                Timer1.Enabled = False
                started = False
                Timer1.Stop()
                Me.Close()
            Next
        Else
            ProcessId = 0
        End If
    Else
        started = True
        Process.Start(myFile)
    End If

End Sub
于 2012-09-15T03:43:35.210 回答