gfritz74
Goto Top

Timer in WPF Label anzeigen

Hallo zusammen,

ich habe dank hacktors hinweis ein WPF Form gebaut.
Da habe ich ein Label namens LabelTimer.
In diesem Label soll ein Timer laufen.
Nur wie kriege ich hin das die Zeit auch in diesem LabelTimer angezeigt wird.
Hier erstmal der Code für das Fenster:
[xml]$Timer_Form = @"  

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  

                Title="Computer Reboot Notifcation" Icon="C:\Users\fritz\source\repos\WpfApp1\Warnung.png" Height="446" Width="725" ResizeMode="NoResize" Topmost="True" WindowStartupLocation="CenterScreen" Background="White" FontFamily="Arial Black" ShowInTaskbar="False" SizeToContent="WidthAndHeight">  
    <Grid Margin="15,15,15,15">  
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Label Content="Nach der Installation von Sicherheitsupdates ist ein Neustart des Computers zwingend erforderlich.&#xD;&#xA;Dieser ist auch nach mehreren Hinweisen nicht erfolgt.&#xD;&#xA;Zur Wahrung der Sicherheitsniveuas muss dieser Heute erfolgen.&#xD;&#xA;Sie haben nun noch einmalig die Möglichkeit den Restart zu verschieben.&#xD;&#xA;Ansonsten sichern Sie Ihre Daten, schließen die geöffneten Anwendungen &#xD;&#xA;und klicken anschließend auf den Button Neustart.&#xD;&#xA;&#xD;&#xA;WARNUNG: Der Rechner wird nach Ablauf der Zeit neu gestartet!&#xD;&#xA;&#xD;&#xA;Vielen Dank ihr IT-Services-Team" FontFamily="Arial" FontWeight="Bold" FontSize="14" Padding="10,10,10,10" RenderTransformOrigin="0.5,0.5" Margin="0,0,0,200">  
            <Label.RenderTransform>
                <TransformGroup>
                    <ScaleTransform/>
                    <SkewTransform AngleX="0"/>  
                    <RotateTransform/>
                    <TranslateTransform X="0"/>  
                </TransformGroup>
            </Label.RenderTransform>
        </Label>
        <Label x:Name="LabelTimer" Content="LabelTimer" HorizontalAlignment="Left" Margin="0,190,0,0" VerticalAlignment="Top" Height="56" Width="340" FontFamily="Arial Black" FontWeight="Bold" FontSize="40" Foreground="Red"/>  
        <Grid Margin="10,270,10,0">  
            <Button x:Name="B_Reboot" Content="Neustart" HorizontalAlignment="Left" Margin="0,20,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.393,0.489" Width="120" Height="50" FontFamily="Arial" FontWeight="Bold"/>  
            <Button x:Name="B_1Hour" Content="1 Stunde&#xD;&#xA;verzögern" HorizontalAlignment="Left" Margin="140,20,0,0" VerticalAlignment="Top" Width="120" Height="50" FontFamily="Arial" FontWeight="Bold"/>  
            <Button x:Name="B_4hour" Content="4 Stunden&#xD;&#xA;verzögern" HorizontalAlignment="Left" Margin="280,20,0,0" VerticalAlignment="Top" Width="120" Height="50" FontFamily="Arial" FontWeight="Bold"/>  
            <Image HorizontalAlignment="Left" Height="99" VerticalAlignment="Top" Width="120" Margin="545,0,0,0" Source="C:\Users\fritz\source\repos\WpfApp1\IS_Logo.bmp" Stretch="Fill"/>  
        </Grid>
        <Grid Margin="-1030,0,1030,133"/>  
    </Grid>

</Window>
"@  

#Timer



#Create a form
$XMLReader = (New-Object System.Xml.XmlNodeReader $Timer_Form)
$TimerForm = [Windows.Markup.XamlReader]::Load($XMLReader)

#Reboot Button
$B_Reboot = $TimerForm.FindName('B_Reboot')  
$B_Reboot.add_click({write-host ich habe es geschafft,$TimerForm.Close()})

#1Hour Button
$B_1Hour = $TimerForm.FindName('B_1Hour')  
$B_1Hour.add_click({      
      $timerUpdate.Stop()
      $TotalTime = 3600
      Create-GetSchedTime -SchedTime $TotalTime
      $timerUpdate.add_Tick($timerUpdate_Tick)
      $timerUpdate.Start()
      $B_1Hour.IsEnabled = $false
      $B_4Hour.IsEnabled = $false
})

#4Hour Button
$B_4hour = $TimerForm.FindName('B_4hour')  
$B_4hour.add_click({
      $timerUpdate.Stop()
      $TotalTime = 14400
      Create-GetSchedTime -SchedTime $TotalTime
      $timerUpdate.add_Tick($timerUpdate_Tick)
      $timerUpdate.Start()
      $B_1Hour.IsEnabled = $false
      $B_4Hour.IsEnabled = $false
      })

Hier der Code für den Timer:
#Function für Timer
Function Create-GetSchedTime {   
Param(   
$SchedTime   
)
      $script:StartTime = (Get-Date).AddSeconds($TotalTime)
      $RestartDate = ((get-date).AddSeconds($TotalTime)).AddMinutes(-5)
      $RDate = (Get-Date $RestartDate -f 'dd.MM.yyyy') -replace "\.","/"      # 16/03/2016  
      $RTime = Get-Date $RestartDate -f 'HH:mm'                                    # 09:31  
      #&schtasks /delete /tn "Post Maintenance Restart" /f 
      #&schtasks /create /sc once /tn "Post Maintenance Restart" /tr "'C:\Windows\system32\cmd.exe' /c shutdown -r -f -t 300" /SD $RDate /ST $RTime /f 
}

#Function Timer-Formular 
Function timer-form
{
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null  
[System.Reflection.Assembly]::LoadWithPartialName( "Microsoft.VisualBasic") | Out-Null  

$outlook = @(Get-Process | ?{ $_.Name -eq "outlook" }).Count  
$word = @(Get-Process | ?{ $_.Name -eq "winword" }).Count  
$excel = @(Get-Process | ?{ $_.Name -eq "excel" }).Count  

$timerUpdate = New-Object 'System.Windows.Forms.Timer'  
$TotalTime = 14400 #in seconds
Create-GetSchedTime -SchedTime $TotalTime
$timerUpdate_Tick={
      # Define countdown timer
      [TimeSpan]$span = $script:StartTime - (Get-Date)
      # Update the display
      $hours = "{0:00}" -f $span.Hours  
      $mins = "{0:00}" -f $span.Minutes  
      $secs = "{0:00}" -f $span.Seconds  
      $labelTime.Text = "{0}:{1}:{2}" -f $hours, $mins, $secs  
      $timerUpdate.Start()
      if ($span.TotalSeconds -le 0)
      {
            $timerUpdate.Stop()
            shutdown -r -f /t 0
            Remove-Variable * -ErrorAction SilentlyContinue
            Remove-Item -Path "C:\Boottime" -Force -Recurse  
            $global:Form.Close() 
      }
}
$Form_StoreValues_Closing=
      {
            #Store the control values
      }

$Form_Cleanup_FormClosed=
      {
            #Remove all event handlers from the controls
            try
            {
                  $Form.remove_Load($Form_Load)
                  $timerUpdate.remove_Tick($timerUpdate_Tick)
                  #$Form.remove_Load($Form_StateCorrection_Load)
                  $Form.remove_Closing($Form_StoreValues_Closing)
                  $Form.remove_FormClosed($Form_Cleanup_FormClosed)
            }
            catch [Exception]
            { }
      }

Hoffe es kann mir jemand helfen um das hinzubekommen.

Danke und Viele Grüße
gfritz74

Content-ID: 1339156019

Url: https://administrator.de/contentid/1339156019

Ausgedruckt am: 25.11.2024 um 14:11 Uhr

wiesi200
wiesi200 03.10.2021 um 16:16:25 Uhr
Goto Top
Hallo,
sitz gerade nicht am Laptop.
und Arbeite eher mit den Windows Forums aber im Grunde brauchst du ein Event “onTimer tick" und dann schreibst du nen neuen Wert in dein Lable
gfritz74
gfritz74 03.10.2021 um 16:27:53 Uhr
Goto Top
Zitat von @wiesi200:

Hallo,
sitz gerade nicht am Laptop.
und Arbeite eher mit den Windows Forums aber im Grunde brauchst du ein Event “onTimer tick" und dann schreibst du nen neuen Wert in dein Lable

Hi Wiesi200,

erstmal Danke für deine Antwort. Ich habe bisher auch eher mit Windows Forms gearbeitet. Da kenn ich das auch.
Aber aufgrund verschiedener Auflösung und Skalierungen bin auch auf WPF gegangen. Da bin ich echt noch Frischling.
Könntest Du mir vielleicht sagen bzw zeigen wie sowas genaus aussieht?
Wäre echt nett.
Beste Grüße
wiesi200
wiesi200 03.10.2021 um 16:33:07 Uhr
Goto Top
Im Endeffekt sollte es so in der Richtung aussehen.
https://wpf-tutorial.com/misc/dispatchertimer/
gfritz74
gfritz74 03.10.2021 um 16:36:46 Uhr
Goto Top
Zitat von @wiesi200:

Im Endeffekt sollte es so in der Richtung aussehen.
https://wpf-tutorial.com/misc/dispatchertimer/

Habe ich auch schon gefunden. Aber ich mache das ganz in PowerShell.
Das Timer Script habe ich ja schon fertig. Ich muss nur den Timer in dem Label angezeigt bekommen.
149569
149569 03.10.2021 aktualisiert um 20:57:45 Uhr
Goto Top
Zitat von @gfritz74:
Habe ich auch schon gefunden. Aber ich mache das ganz in PowerShell..

Brauchst du nur die Suche hier etwas quälen
WPF Progressbar in Powershell aktualisieren
gfritz74
Lösung gfritz74 04.10.2021 um 10:27:21 Uhr
Goto Top
Zitat von @149569:

Zitat von @gfritz74:
Habe ich auch schon gefunden. Aber ich mache das ganz in PowerShell..

Brauchst du nur die Suche hier etwas quälen
WPF Progressbar in Powershell aktualisieren

Guten Morgen,

habe es hinbekommen.

Danke Euch