4

コンソール アプリの場合、アプリケーションの「自動実行」部分に進む前に、ユーザーがキーまたはキーのセットを入力するのを一定時間 (約 10 秒) 待機する方法を知る必要があります。

タイマーがどのように機能するか、またはthreading.sleepがどのように機能するかがよくわからないため、これは私を悩ませています。一日中グーグルでした。

いくつかの疑似コード:

1.アプリが開く

2.アプリは、ユーザーが「k」キーを押すまで 10 秒間待機します。

3. ユーザーが k をヒットした場合は 4 に進みます。ユーザーがヒットしなかった場合は 5 に進みます。

4.機能を実行する(フォームを開く)

5.機能を実行する(何かをする)

単純なことだと思いますが、何が起こっているのか理解できません。

4

4 に答える 4

11

C# コンソール アプリケーションのサンプル コードを次に示します。タイマーを使用せず、代わりにスリープを使用します。タイマーベースのコードよりも少し理解しやすいかもしれません。

        static void openForm()
        {
            Console.WriteLine("Form opened!");
        }

        static void doSomething()
        {
            Console.WriteLine("Do something!");
        }

        static void Main(string[] args)
        {
            bool optionForm = false;
            int seconds = 1;

            Console.Write("Press 'k' to open form");

            while (true)
            {                
                if (Console.KeyAvailable)
                {
                    ConsoleKeyInfo c = Console.ReadKey(true);
                    if (c.Key == ConsoleKey.K)
                    {                        
                        optionForm = true;
                        break;
                    }
                }

                System.Threading.Thread.Sleep(1000);

                if (seconds++ > 10)
                    break;

                Console.Write('.');
            }

            Console.WriteLine();

            if (optionForm)
                openForm();
            else
                doSomething();

            Console.ReadKey();
        }
于 2010-04-27T15:04:48.403 に答える
4

10 秒のタイマーをオフに設定します。

タイマーが切れたときにイベントを発生させます。

イベント ハンドラーで、「自動実行」セクションに進みます。

タイマーが切れる前にユーザーがキーを押した場合、スレッドを強制終了します。

MSDNのTimerクラス ページには、一定時間待機するタイマーの例があります。

于 2010-04-26T15:36:28.693 に答える
1

ありがとうマーロン!それは本当に私を大いに助けました。

私は次のコードを使用しました:

int minutes = 1;
while (true)
{
   if (Console.KeyAvailable)
   {
        ConsoleKeyInfo c = Console.ReadKey(true);
    if (c.Key == ConsoleKey.Enter)
    {
            break;
    }
   }
   Thread.Sleep(1000);
   if (minutes++ > 10)
   {
    throw;
   }
}
于 2011-02-11T12:40:13.333 に答える
0

これもあなたのためにトリックを行ういくつかのコードです。

        Form1 f = new Form1();
        System.Threading.Timer t = new System.Threading.Timer(o => f.Invoke(new Action(() => f.textBox1.Enabled = true)), null, 10000, System.Threading.Timeout.Infinite);
        f.ShowDialog();
        t.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
于 2010-04-26T15:42:29.113 に答える