0

我在表格上有一个按钮。通过按下按钮,矩形必须移动。但是什么都没有发生,为什么?对我来说,按钮是异步的很重要,因为我想在未来调用异步方法。

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);
    }
4

2 回答 2

1

如果您正在开发 Windows Store App,那么您的按钮单击事件将是这样的。

using Windows.UI.Core;

private async void Button_Click_1(object sender, RoutedEventArgs e)
{
    while (true)
    {
        await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => MoveRect());
        Sleep(100);
    }
}
于 2013-04-10T12:35:13.773 回答
0

好的,这段代码提出了很多问题。最重要的是@Xyroid 的一个:你为什么不用动画?WPF/Silverlight 已经内置了对执行此类操作的支持。

但是,考虑到您完全确定自己在做什么,并且只想让您提交的代码正常工作,我可以建议以下快速修复:

while (true)
{
    Dispatcher.Invoke(new Action(MoveRect));
    Sleep(100);
}

它适用于我的电脑(r)。但让我知道它是否对你有帮助。

于 2013-04-10T11:38:55.210 回答