-2

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

对不起,但我为那些无法跳出框框思考并且甚至在不了解情况的情况下仅标记-2的人感到难过。

无论如何,发现关于使用 await 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;
                }

            }
        }
4

3 回答 3

1

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

于 2012-06-27T12:38:41.247 回答
1

我认为您误解了计时器的使用。如果您将以下代码放在顶部,StartTimer您将明白我的意思。

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

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

大编辑抱歉没有意识到你在看 Metro。我上面所说的仍然有效,但我将不再提供解决方案。

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

于 2012-06-27T12:52:33.227 回答
1

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

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

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

于 2012-06-27T12:57:14.243 回答