如何在C#中终止永无止境的任务?

时间:2017-01-11 18:11:13

标签: c# wpf task

我在WPF Canvas中编写一个非常简单的游戏 - 通过每17毫秒将椭圆渲染一个像素来移动对象在异步任务中移动 - 这就是我管理椭圆移动的方式。我甚至处理了与其他物体的碰撞 - 它只是改变了方向。但真正的问题是,根据我对stackoverflow的研究,我无法处理Game Over,因为Task无法取消。如果椭圆离开屏幕,我可以显示一个MessageBox,但是在单击OK之后它会继续执行此异步循环。有没有办法让它停止?

async Task MoveStart()
    {
        double rozdiel = car.ActualWidth - snowball.ActualWidth;
        Back:
        while(crashed == false)
        {
            while(rightEl > 20)
            {
                topEl += 1;
                rightEl -= 0.5;
                leftEl += 0.5;
                botEl -= 1;
                Canvas.SetTop(snowball, topEl);
                Canvas.SetLeft(snowball, leftEl);
                if (botEl == botpixel + car.Height && leftpixel <= leftEl + snowball.ActualWidth && rightpixel <= rightEl + snowball.ActualHeight)
                {
                    body++;
                    textBlock1.Text = "Points: " + body + "\nHealth: " + zdravie;
                    crashed = true;
                    goto Crashed;
                }
                if(botEl == 0)
                {
                    zdravie--;
                    textBlock1.Text = "Points: " + body + "\nHealth: " + zdravie;
                    MessageBox.Show("Game over");
                }
                await Task.Delay(17);
            }
        }
        Crashed:
        while(crashed)
        {
            while (topEl > 50)
            {
                topEl -= 1;
                rightEl -= 0.5;
                leftEl += 0.5;
                botEl += 1;
                Canvas.SetTop(snowball, topEl);
                Canvas.SetLeft(snowball, leftEl);
                if (topEl == 50)
                { 
                    crashed = false;
                    goto Back;
                }
                await Task.Delay(17);
            }
        }
    }

那些双倍权利El,leftEl ......是画布的边缘 我从简单的异步void

调用Task
public async void Ready()
    {
        await MoveStart();
    }

这个Ready()无效我从MainWindow调用,因为MainWindow不能异步

0 个答案:

没有答案