不移动矩形

时间:2013-04-10 10:08:02

标签: c# windows-runtime

我在表单上有一个按钮。按下按钮,矩形必须移动。但没有任何反应,为什么? 对我来说重要的是该按钮是异步的,因为我想在将来的异步方法中调用。

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

2 个答案:

答案 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)。但是,如果它对你有所帮助,请告诉我。