Powershell Timer - Update gui

后端 未结 2 669
無奈伤痛
無奈伤痛 2021-01-06 02:06

I have created a powershell timer, and after every 1 second, I would like to run a function to execute or post text to a text box log on the interface.

Run the belo

2条回答
  •  孤城傲影
    2021-01-06 02:36

    I took what you had, and looked at this egg_timer project and came up with the following:

      $timer = New-Object System.Windows.Forms.Timer
      $timer.Interval = 1000
      $timer.add_tick({AddToLog 'Post to log every 1 second, not as a batch'})
    
    
    
    function AddToLog($logtext)
    {
        $txtLog.Text = $txtLog.Text + "`r`n" + $logtext
        $txtLog.ScrolltoCaret
    }
    
    function startTimer() { 
    
       $timer.start()
    
    }
    
    function stopTimer() {
    
        $timer.Enabled = $false
        Write-Host "Close Function"
    
    }
    
    
    ########################
    # Setup User Interface
    ########################
    
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
    
    $objForm = New-Object System.Windows.Forms.Form 
    $objForm.Text = "Timer Example"
    $objForm.Size = New-Object System.Drawing.Size(330,380) 
    $objForm.StartPosition = "CenterScreen"
    
    
    #Start Button
    $btnStart = New-Object System.Windows.Forms.Button
    $btnStart.Location = New-Object System.Drawing.Size(10,190)
    $btnStart.Size = New-Object System.Drawing.Size(140,35)
    $btnStart.Text = "Start"
    
    $btnStart.Add_Click({StartTimer; })
    $objForm.Controls.Add($btnStart)
    
    #Stop Button
    $btnStop = New-Object System.Windows.Forms.Button
    $btnStop.Location = New-Object System.Drawing.Size(150,190)
    $btnStop.Size = New-Object System.Drawing.Size(140,35)
    $btnStop.Text = "Stop"
    $btnStop.Add_Click({StopTimer; })
    $objForm.Controls.Add($btnStop)
    $btnStop.Enabled  = $true
    
    #Log Area
    $lblLog = New-Object System.Windows.Forms.Label
    $lblLog.Location = New-Object System.Drawing.Size(10,230) 
    $lblLog.Size = New-Object System.Drawing.Size(80,20) 
    $lblLog.Text = "Event Log:"
    $objForm.Controls.Add($lblLog) 
    
    $txtLog = New-Object System.Windows.Forms.Textbox
    $txtLog.Location = New-Object System.Drawing.Size(10,250)
    $txtLog.Size = New-Object System.Drawing.Size(290,90)
    $txtLog.Multiline = $True
    $txtLog.Scrollbars = "vertical"
    
    $txtLog.Add_Click({$txtLog.SelectAll(); $txtLog.Copy()})
    $objForm.Controls.Add($txtLog)
    
    
    $objForm.Add_Shown({$objForm.Activate()})
    [void] $objForm.ShowDialog()
    

提交回复
热议问题