嗨,大家好我试图让我的屏幕使用计时器闪烁莫尔斯码,但没有运气,你能发现任何问题吗?
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;
}
}
}
答案 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;
将其更改为最适合您的方式,但不要使用这些计时器