我在表单上有一个按钮。按下按钮,矩形必须移动。但没有任何反应,为什么? 对我来说重要的是该按钮是异步的,因为我想在将来的异步方法中调用。
XAML:
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<Button Content="Start" HorizontalAlignment="Left" Margin="849,152,0,0" VerticalAlignment="Top" Height="45" Width="196" Click="Button_Click_1"/>
<Rectangle x:Name="rect" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="100" Stroke="Black" VerticalAlignment="Top" Width="100"/>
</Grid>
C#:
private double step = 5;
private async void Button_Click_1(object sender, RoutedEventArgs e)
{
while (true)
{
MoveRect();
Sleep(100);
}
}
private void MoveRect()
{
rect.Margin = new Thickness(rect.Margin.Left + step, rect.Margin.Top + step, rect.Margin.Right - step, rect.Margin.Bottom - step);
}
static void Sleep(int ms)
{
new System.Threading.ManualResetEvent(false).WaitOne(ms);
}
答案 0 :(得分:1)
如果您正在开发Windows应用商店应用,那么您的按钮点击事件将是这样的。
using Windows.UI.Core;
private async void Button_Click_1(object sender, RoutedEventArgs e)
{
while (true)
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => MoveRect());
Sleep(100);
}
}
答案 1 :(得分:0)
好的,这段代码提出了不少问题。最重要的一个是@Xyroid的一个:你为什么不使用动画? WPF / Silverlight已经内置了对这类内容的支持。
Hovewer,考虑到你完全确定自己在做什么,只想获得你提交的代码,我可以提出以下快速解决方法:
while (true)
{
Dispatcher.Invoke(new Action(MoveRect));
Sleep(100);
}
它适用于我的电脑(r)。但是,如果它对你有所帮助,请告诉我。