我的问题是,在我的代码中,GIF 播放一次,然后就卡住了。我已经尝试了各种方法来解决这个问题,但不幸的是没有任何帮助。 我尝试停止它,然后将其设置为零位置并再次播放。再次声明 GIF 为来源并没有帮助。唯一有效的是将源设置为 $null,然后再次设置源。然而,这会产生非常难看的闪烁效果。 这是我当前的代码:
function Get-Controls
{
# Find and assign various UI controls from the loaded XAML window by their names
$global:Load_Installing_lbl = $global:window.FindName("Installing_lbl")
$global:Load_Loader_gpl = $global:window.FindName("Loader_gpl")
$global:LoaderNum = 1
$Load_Loader_gpl.Source = [Uri]::new("$PSScriptRoot\Loaders\Loader ($global:LoaderNum).gif")
$global:Load_Loader_gpl.Add_MouseLeftButtonDown({
$global:LoaderNum++
if (-not (Test-Path "$PSScriptRoot\Loaders\Loader ($global:LoaderNum).gif"))
{
$global:LoaderNum = 1
}
# Reset the loader to ensure the new GIF will play infinitely
$Load_Loader_gpl.Stop()
$Load_Loader_gpl.Source = [Uri]::new("$PSScriptRoot\Loaders\Loader ($global:LoaderNum).gif")
$Load_Loader_gpl.Play()
})
$Load_Loader_gpl.add_MediaEnded({
$wert = [Environment]::GetEnvironmentVariable("Installation", "User")
if ($wert -eq "FINISH")
{
[Environment]::SetEnvironmentVariable("Installation", $null, "User")
$global:Window.Close()
}
else
{
# Temporarily set the source to null to reset the GIF
$Load_Loader_gpl.Stop()
$Load_Loader_gpl.Position = [TimeSpan]::Zero # Set the initial position to zero
Write-Host "t0.20"
$Load_Loader_gpl.Play()
}
})
# Ensure the GIF plays in an endless loop initially
$Load_Loader_gpl.Position = [TimeSpan]::Zero # Set the initial position to zero
$Load_Loader_gpl.Play()
}
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow" Height="300" Width="300" WindowStyle="None" AllowsTransparency="True" Background="Transparent">
<Border CornerRadius="0, 20, 0, 20" Background="LightGray" BorderBrush="#FFFDC400" BorderThickness="5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Label Name="Installing_lbl" HorizontalAlignment="Center" VerticalAlignment="Center" FontWeight="Bold" FontSize="24">Installing Test....</Label>
<MediaElement Width="200" Height="200" Grid.Row="1" Margin="10" Name="Loader_gpl" LoadedBehavior="Manual" UnloadedBehavior="Stop">
</MediaElement>
</Grid>
</Border>
</Window>
如上所述,我尝试使用 XAML 和 Powershell 无限播放 GIF。
PlayLORD-SysOp 值得赞扬的是他对 此相关答案的评论;自 .NET 8 起:
再次调用
.Position
之前将 [TimeSpan]::Zero
属性重置为 .Play()
不起作用,但 [TimeSpan]::FromMilliseconds(1)
- 特别是 - 可以。
如何:重复媒体播放中的信息不适用 - 大概它仅适用于始终“移动”媒体,例如声音和视频文件。
$Load_Loader_gpl.add_MediaEnded({
# ... (conditional code omitted)
# Restart the animated GIF.
$this.Position = [TimeSpan]::FromMilliseconds(1)
$this.Play()
})