Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 递减计数器_C#_Wpf_Counter - Fatal编程技术网

C# 递减计数器

C# 递减计数器,c#,wpf,counter,C#,Wpf,Counter,我想知道如何制作一个递减计数器来替换计时器,就像计时器从3开始,每秒钟递减一次,直到达到零,在那里它将执行一个动作。有什么帮助吗 // Change Image from "Hut" to Mole \\ private void ChangeImage() { Image newImage = HoleImage(); molePopup = MoleImage(); int numCol = Convert.ToInt32(NumberOfCo

我想知道如何制作一个递减计数器来替换计时器,就像计时器从3开始,每秒钟递减一次,直到达到零,在那里它将执行一个动作。有什么帮助吗

// Change Image from "Hut" to Mole \\
private void ChangeImage()
{
        Image newImage = HoleImage();
        molePopup = MoleImage();
        int numCol = Convert.ToInt32(NumberOfColumns);
        //Random Number - Col
        Random randomColumns = new Random();
        int ranCol = randomColumns.Next(1, numCol);
        //Random Number - Row
        Random randomRow = new Random();
        int ranRow = randomRow.Next(1, NumberofRows);
        string Moleimage = TUtils.GetIniFileString(Moleini, "ImagePath", "PictureFile", Root + "mole2.png");
        //Populate Grid with Mole at Random Times \\
        Grid.SetRow(molePopup, ranRow);
        Grid.SetColumn(molePopup, ranCol);
        grid_Main.Children.Add(molePopup);

        molePopup.MouseUp += new MouseButtonEventHandler((o, e) =>
        {
            MolePoints++;
            grid_Main.Children.Remove(molePopup);
        });
}

我可能不太清楚,但只要程序中只有一个线程(除此之外什么都没有),您就可以使用以下内容:

for(int i = 3; i > 0; i--)
{
    Thread.Sleep(1000);
}

doWhatever();
对于循环的每次迭代,您都会“休眠”线程1000毫秒或1秒。为此,您需要使用System.Threading将System.Threading包含在
中。如果您在后台执行某些操作,请使用其他方法而不是Sleep,因为它会在指定的持续时间内锁定线程执行

编辑:

Thread.Sleep()
方法的MSDN文档。如果我没弄错你的意思的话,看起来和你想做的很相似

  • 使用
  • 将interval属性设置为1000(=1秒)
  • 创建一个表示倒计时计时器的变量
  • 创建一个勾号事件,检查倒计时变量是否为零。如果为零=>停止计时器并执行操作。如果不是=>减少变量
  • 启动计时器

  • 保存一个每秒递增的变量,从计数器开始值中减去该变量,如果该值为0,则执行操作?我看不出这里有什么问题。@xmashallax很抱歉我是C#新手,如果可以,你能给我举个例子吗?代码示例与计时器有什么关系?使用计时器有什么问题吗?谢谢,但我已经尝试过使用Sleep函数,结果不太好。它冻结了整个程序,在设置它的时候,我还有很多其他后台进程同时运行。Thread.Sleep()基本上就是这样做的。你到底想干什么?输出一个倒计时?为什么你不能使用一个调度程序(在删除的答案中提到)?所以,我正在做一个打鼹鼠游戏,我需要能够显示一个鼹鼠的图像,然后放置一个鼹鼠洞的图像。计数器会说,“等几秒钟,然后把鼹鼠洞放在那里”,但我不能使用调度计时器,因为使用睡眠功能作为延迟使程序完全停止。