| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 830 人关注过本帖
标题:控制台 如何 实时监测 是否按下某个键 ?
只看楼主 加入收藏
黄昏黄昏
Rank: 2
等 级:论坛游民
帖 子:49
专家分:41
注 册:2013-1-10
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:5 
控制台 如何 实时监测 是否按下某个键 ?
while(true)  
{            
        //不断循环输出并刷新时间            
        console.Write(DateTime.Now.ToShortTimeString());?            

        //如果按键为Esc,则退出                                
        if (Console.ReadKey().Key == ConsoleKey.Escape)                    
        return;

        System.Threading.Thread.Sleep(1000);            

        console.Clear();      
}
我想在循环里不断刷新时间,同时判断用户是否按下键盘上的按键,如果按下按键则判断是否为escape,若是则退出,否则继续循环。

但是这样的话,虽然能达到按下Escape键退出的目的,可是每次循环到if语句时,就会等待用户输入,控制台上也就不刷新了,必须要按下任意键才能继续循环,应该要怎么改呢?
搜索更多相关主题的帖子: return escape 控制台 如何 键盘 
2013-09-27 20:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你沒有認真看Console類庫的幫助了吧,有個檢測是否有按鍵的方法,若有按鍵動作,再進行讀取,不要先調用讀取方法,那樣肯定死等了。

授人以渔,不授人以鱼。
2013-09-28 10:40
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
程序代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(String[] args)
        {
            Console.BackgroundColor = ConsoleColor.DarkBlue;
            Console.ForegroundColor = ConsoleColor.White;
            Console.Clear();

            Timer timer = new Timer(1000);
            timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
            timer.Enabled = true;

            Console.SetCursorPosition(0, 24);
            Console.Write("按下 [Esc] 鍵結束程序...");
            Show_Time();
            while (!Console.KeyAvailable || (Console.ReadKey(true).Key != ConsoleKey.Escape))
            {
                ;
            }
        }

        private static void OnTimedEvent(object source, ElapsedEventArgs e)
        {
            Show_Time();
        }

        private static void Show_Time()
        {
            Int32 top = Console.CursorTop;
            Int32 left = Console.CursorLeft;
            Console.SetCursorPosition(20, 10);
            Console.Write(DateTime.Now.ToLocalTime());
            Console.SetCursorPosition(left, top);
        }
    }
}


[ 本帖最后由 TonyDeng 于 2013-9-28 13:40 编辑 ]

授人以渔,不授人以鱼。
2013-09-28 13:32
黄昏黄昏
Rank: 2
等 级:论坛游民
帖 子:49
专家分:41
注 册:2013-1-10
收藏
得分:0 
回复 2楼 TonyDeng
没有啊,我看过msdn上console类的属性方法,但是没找到相关的。。

得不到的永远在骚动,被偏爱都有恃无恐
2013-09-28 13:34
黄昏黄昏
Rank: 2
等 级:论坛游民
帖 子:49
专家分:41
注 册:2013-1-10
收藏
得分:0 
回复 3楼 TonyDeng
谢谢!

得不到的永远在骚动,被偏爱都有恃无恐
2013-09-28 13:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不需要用睡眠的,那樣會阻塞綫程,讓你在1秒內無法做別的事,而且時間的跳動間隔也難保在1秒之內。用系統的時鐘中斷就好了。

授人以渔,不授人以鱼。
2013-09-28 13:47
快速回复:控制台 如何 实时监测 是否按下某个键 ?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017699 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved