2012-06-27 251 views
-2

嗨,夥計們,我想讓我的屏幕使用計時器閃爍莫爾斯電碼,但沒有運氣,你能發現任何問題嗎?使用計時器和顏色來顯示莫爾斯電碼

Sry,但我爲那些無法想象出現的人感到難過,只是在沒有了解情況的情況下標記-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; 
       } 

      } 
     } 
+0

你的方式似乎並不輸出任何東西任何地方 –

回答

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; 

它改變它最適合你,但不使用這些定時器

+0

does System.Threading.Thread.Sleep(3000);甚至可以使用Metro應用程序?我剛剛嘗試過.Thread找不到 – CodeGuru

+0

請查看http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/bb07ce11-ae4b-4f27-971c-15bb50191588 – JohnnBlade

+0

嗨,我發現了一個解決方案,更新我的問題,我的gridHalfFront.Opacity = 1;沒有更新,不知道爲什麼 – CodeGuru

1

您的代碼缺少Timer事件處理程序。在調用Start()之後,在經過的時間之後,將引發Timer的Tick事件。你必須改變不透明度。

+0

無效timer_Tick(對象發件人,對象E) { gridHalfFront做。不透明度= 0; } ? – CodeGuru

1

我認爲你誤解了定時器的使用。如果你把下面的代碼放在StartTimer的頂部,你會明白我的意思。

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

當你運行你將得到一堆定時器正在被立即創建。這不是你想要的,原因有兩個。首先,它們都被分配到同一個變量,所以第二個是'邏輯上'殺掉第一個,等等。其次,你不希望它們一次被創建,因爲所有的1秒都會運行在1秒後的同一時間,3秒後所有3秒鐘都會一起運行。而且,如前所述,要在計時器到期後運行代碼,您需要連接事件。

BIG EDITS對不起沒有意識到你正在看地鐵。我上面所說的仍然存在,但我會退出提供解決方案。

鑑於關於Sleep()對Metro不起作用的意見,我認爲您需要讓定時器內的所有代碼都包含一個字符,然後爲定時器中的下一個字符設置間隔。將在幾分鐘內提供一些代碼...