C# 没有线程的计时器暂停。睡眠

C# 没有线程的计时器暂停。睡眠,c#,timer,C#,Timer,我尝试在没有thread.sleep的情况下生成计时器,以停止延迟,因此任何关于如何在没有thread.sleep的情况下生成此代码的想法都可以,但它会停止20ms。谢谢你的帮助!:)对不起,我的英语不好 Timer BulletTimer = new Timer(); BulletTimer.Tick += (s, args) => BulletKillPlayer(Bullet); BulletTimer.Interval = 20; BulletTimer.Start(); pri

我尝试在没有thread.sleep的情况下生成计时器,以停止延迟,因此任何关于如何在没有thread.sleep的情况下生成此代码的想法都可以,但它会停止20ms。谢谢你的帮助!:)对不起,我的英语不好

Timer BulletTimer = new Timer();
BulletTimer.Tick += (s, args) => BulletKillPlayer(Bullet);
BulletTimer.Interval = 20;
BulletTimer.Start();

private void BulletKillPlayer(Bullet)
{
    bool pX, pY, pD1, pD2, nX, nY, nD1, nD2;
    pX = false; pY = false; pD1 = false; pD2 = false; nX = false; nY = false; 
    for (int i = 1; i < 20; i++)
    {
        if (User.Range >= i)
        {
            Thread.Sleep(20);
            foreach (MapItem MapItem in MapItem.Boxs.Values)
            {
                if (MapItem.X == Bullet.X && MapItem.Y == Bullet.Y + i && !pX) { pX = BreakBox(Bullet, MapItem); KillPlayer(Bullet, MapItem); }
                if (MapItem.X == Bullet.X && MapItem.Y == Bullet.Y - i && !pY) { pY = BreakBox(Bullet, MapItem); KillPlayer(Bullet, MapItem); }
                if (MapItem.X == Bullet.X + i && MapItem.Y == Bullet.Y && !nX) { nX = BreakBox(Bullet, MapItem); KillPlayer(Bullet, MapItem); }
                if (MapItem.X == Bullet.X - i && MapItem.Y == Bullet.Y && !nY) { nY = BreakBox(Bullet, MapItem); KillPlayer(Bullet, MapItem); }
            }
        }
    }
}
Timer BulletTimer=new Timer();
BulletTimer.Tick+=(s,args)=>BulletKillPlayer(Bullet);
时间间隔=20;
BulletTimer.Start();
私人虚空弹头杀手(弹头)
{
布尔pX、pY、pD1、pD2、nX、nY、nD1、nD2;
pX=false;pY=false;pD1=false;pD2=false;nX=false;nY=false;
对于(int i=1;i<20;i++)
{
如果(User.Range>=i)
{
睡眠(20);
foreach(MapItem.Boxs.Values中的MapItem-MapItem)
{
如果(MapItem.X==Bullet.X&&MapItem.Y==Bullet.Y+i&&pX){pX=BreakBox(Bullet,MapItem);KillPlayer(Bullet,MapItem);}
如果(MapItem.X==Bullet.X&&MapItem.Y==Bullet.Y-i&&pY){pY=BreakBox(Bullet,MapItem);KillPlayer(Bullet,MapItem);}
如果(MapItem.X==Bullet.X+i&&MapItem.Y==Bullet.Y&&nX){nX=BreakBox(Bullet,MapItem);KillPlayer(Bullet,MapItem);}
如果(MapItem.X==Bullet.X-i&&MapItem.Y==Bullet.Y&&nY){nY=BreakBox(Bullet,MapItem);KillPlayer(Bullet,MapItem);}
}
}
}
}

你不能那样做。您需要使用
wait
或将代码分解为单独的勾号处理程序。如果我分解代码,它将如何继续?除息的