【发布时间】:2019-02-24 04:04:22
【问题描述】:
我正在编写一个通过网格更改标签位置的简单动画。我尝试对线程使用 Sleep 方法,但标签每秒移动的动画不可见。它只是在一段时间(3 秒)后在最终位置显示标签。
这是 C# 代码:
private void BtnUno_Click(object sender, RoutedEventArgs e)
{
for(int i = 1; i < 4; i++)
{
Grid.SetColumn(lblUno, i);
Thread.Sleep(1000);
}
}
XAML 代码:
<Window x:Class="AlgoritmoDDA.MainWindow"
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"
xmlns:local="clr-namespace:AlgoritmoDDA"
mc:Ignorable="d"
Title="Algoritmo DDA" Height="450" Width="700" ResizeMode="NoResize">
<Grid>
<Grid Name="screen" Height="150" Width="600" VerticalAlignment="Top" Margin="0, 40">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Label Name="lblUno" Background="Black" Grid.Column="0"/>
</Grid>
<Button Name="btnUno" Content="Click Me" Height="34" Width="100"
VerticalAlignment="Bottom" Margin="0,30"
FontSize="16"
Click="BtnUno_Click"/>
</Grid>
lblUno 是标签的名称。单击按钮后调用该指令。我想了解为什么它不起作用,我做错了什么,以及是否更好地使用另一个不是线程的东西。我希望得到的不仅仅是一个快速的解决方案,而是一个完整的解决方案。谢谢
【问题讨论】:
-
如果您能提供minimal reproducible example,那就太好了。
I implement a thread是什么意思? -
永远不要在 UI 应用程序中调用 Thread.Sleep。将
Thread.Sleep(1000)替换为await Task.Delay(1000)并声明Click 处理程序方法async。
标签: c# wpf thread-sleep