-2

こんにちは、私はタイマーを使用して画面にモールス信号を点滅させようとしていますが、うまくいきません。何か問題を見つけることができますか?

申し訳ありませんが、箱から出して考えることができず、状況を理解することさえせずに-2をマークするだけの人には悲しいです.

とにかく、 await Task.Delay(100) but 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

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;

あなたに最適な方法に変更しますが、それらのタイマーは使用しないでください

于 2012-06-27T12:57:14.243 に答える
1

タイマーの使い方を誤解していると思います。次のコードを一番上に置くと、StartTimer私が何を意味するかがわかります。

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

実行すると、多数のタイマーがすぐに作成されます。これは、2 つの理由から必要なものではありません。まず、それらはすべて同じ変数に割り当てられているため、2 番目の変数は最初の変数を「論理的に」殺します。 1 秒後に同じ時間になり、3 秒後にはすべて 3 秒後に一緒に実行されます。そして、既に述べたように、タイマーが切れた後にコードを実行するには、イベントをフックする必要があります。

大きな編集申し訳ありませんが、あなたがメトロを見ていることに気づきませんでした。上で述べたことは今でも有効ですが、解決策の提供は控えます。

Metro で作業していないというコメントSleep()を考えると、1 つの文字のタイマー内のすべてのコードをそうする必要があると思います。次に、タイマー内から次の文字の間隔を設定します。数分でいくつかのコードを提供します...

于 2012-06-27T12:52:33.227 に答える
1

コードに Timer イベント ハンドラがありません。Start() を呼び出した後、経過時間が経過すると、Timer からの Tick イベントが発生します。そこで不透明度を変更する必要があります。

于 2012-06-27T12:38:41.247 に答える