使用Timer和color显示莫尔斯电码

时间:2012-06-27 12:36:55

标签: c# windows-8 microsoft-metro

嗨,大家好我试图让我的屏幕使用计时器闪烁莫尔斯码,但没有运气,你能发现任何问题吗?

Sry但我为那些不能开箱即用的人感到难过,只是在没有理解情况的情况下标记-2。

无论如何,发现使用等待Task.Delay(100)但gridHalfFront.Opacity = 1;在被阅读时不被“激活”。不知道为什么。

async public void RunMorseCode()
        {
            foreach (char c in word.ToCharArray())
            {
                string rslt = Codes[c.ToString()].Trim();
                foreach (char c2 in rslt.ToCharArray())
                {
                    if (c2 == '.')
                    {
                        gridHalfFront.Opacity = 0;
                       await Task.Delay(100);

                    }
                    else
                    {
                        gridHalfFront.Opacity = 0;
                        await Task.Delay(1000);

                    }
                    gridHalfFront.Opacity = 1;
                }

            }
        }

3 个答案:

答案 0 :(得分:1)

您的代码缺少Timer事件处理程序。在调用Start()之后,经过一段时间后,将引发Timer中的Tick事件。你必须改变不透明度。

答案 1 :(得分:1)

我认为你误解了Timer的使用。如果您将以下代码放在StartTimer的顶部,您将看到我的意思。

Console.WriteLine("Started {0}", inputTiming);

当你跑步时,会立即创建一堆计时器。这不是你想要的两个原因。首先,它们都被分配到同一个变量,所以第二个是“逻辑上”杀掉第一个变量,等等。其次,你不希望它们同时被创建,因为所有1秒的所有变量都将在1秒后同一时间,3秒后所有3秒钟将一起运行。并且,如前所述,要在计时器到期后运行代码,您需要连接事件。

BIG EDITS 很抱歉没有意识到你在看Metro。我上面所说的仍然有用,但我将不再提供解决方案。

鉴于关于Sleep()没有使用Metro的评论,我认为您需要在计时器内为一个字符设置所有代码,然后在计时器中设置下一个字符的间隔。将在几分钟内提供一些代码......

答案 2 :(得分:1)

在yr循环中使用System.Threading.Thread.Sleep(1000)和/或System.Threading.Thread.Sleep(3000)以使yr屏幕闪烁开启和关闭

    gridHalfFront.Opacity = 1;
    if (c2 == '.')
    {
        System.Threading.Thread.Sleep(1000);
    }
    else
    {
        System.Threading.Thread.Sleep(3000);
    }
    gridHalfFront.Opacity = 0;

将其更改为最适合您的方式,但不要使用这些计时器