質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

2986閲覧

(コンソールアプリにおけるカウントダウンを表示)繰り返し処理をしている間クリックしても反応できなくする

mercurian-teto

総合スコア75

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1グッド

0クリップ

投稿2017/11/03 07:43

編集2017/11/03 08:09

下のコンソールアプリのコードは5分間待機している間
カウントダウンしている具体的な数字
をコンソールの画面に表示するプログラムです。

C#

1 //5分待機する 2 for (int i = 60; 0 <= i; i--) 3 { 4 Console.CursorLeft = 0; 5 Console.Write("しばらくお待ちください:{0:D3}", i); 6 Thread.Sleep(1000); 7 }

実行している間このような画面になります。
![イメージ説明
ループ分が実行されている間コンソールアプリをクリックしても
(コンソールアプリの黒い画面の部分をクリックしても)
カウント表示が止まらないようにするコードを教えてください。

なければ、フォームアプリで同じような画面(カウントダウンが表示されるメッセージボックス)が出てくるようにするコードを教えてください。

hihijiji👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コマンドプロンプトのプロパティの簡易編集モードにチェックが入っているとそのような動作になります。
実行時に簡易編集モードを無効にするのは面倒ですが、一例をあげます。
kernel32.dllのAPIを使ってます。

C#

1class Program 2{ 3 static void Main(string[] args) 4 { 5 const uint ENABLE_QUICK_EDIT = 0x0040; 6 uint consoleMode; 7 // STD_INPUT_HANDLE (DWORD): -10 is the standard input device. 8 const int STD_INPUT_HANDLE = -10; 9 10 IntPtr consoleHandle = GetStdHandle(STD_INPUT_HANDLE); 11 GetConsoleMode(consoleHandle, out consoleMode); 12 13 consoleMode &= ~ENABLE_QUICK_EDIT; 14 15 SetConsoleMode(consoleHandle, consoleMode); 16 17 for (int i = 60; 0 <= i; i--) 18 { 19 Console.CursorLeft = 0; 20 Console.Write("しばらくお待ちください:{0:D3}", i); 21 Thread.Sleep(1000); 22 } 23 } 24 25 [DllImport("kernel32.dll", SetLastError = true)] 26 static extern IntPtr GetStdHandle(int nStdHandle); 27 28 [DllImport("kernel32.dll")] 29 static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode); 30 31 [DllImport("kernel32.dll")] 32 static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode); 33}

投稿2017/11/03 08:53

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mercurian-teto

2017/11/03 09:37

回答ありがとうございます。 winAPIを使うかコマンドプロンプトの設定を変えるのですね。 親切に回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問