检测按键无限循环时按

时间:2014-09-10 22:45:19

标签: c# keypress twitch

所以我的Form构造函数中有一个无限循环,它将从Twitch.tv API加载一个json字符串。但是,此应用程序将从任务栏运行。所以我设置了全局热键,当用户点击F1时,应该显示一个消息框。我面临的问题是在循环中尝试检测按键。我需要循环的原因是我需要知道抽搐流光线何时上线或离线。我试过做一个Windows服务,所以我不必进行无限循环,但我无法检测服务中的按键。我知道最好的做法是摆脱循环,但我不确定如何。这是代码。

 private KeyHandler ghk;
    private System.Timers.Timer liveTime = new System.Timers.Timer();
    UserInfo info;

    public Form1()
    {
        InitializeComponent();
        ghk = new KeyHandler(Keys.F1, this);
        ghk.Register();

        while (true)
        {
            using (var webClient = new System.Net.WebClient())
            {
                var json = webClient.DownloadString("https://api.twitch.tv/kraken/streams/lirik");
                // Now parse with JSON.Net
                info = new UserInfo(json);
            }

            info.streamLive();

            if (info.streamLive() && !liveTime.Enabled)
            {
                liveTime.Start();
            }

            if (!info.streamLive())
            {
                liveTime.Stop();
            }
        }
    }

    private void HandleHotkey()
    {
        MessageBox.Show("hello");
    }

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == Constants.WM_HOTKEY_MSG_ID)
            HandleHotkey();
        base.WndProc(ref m);
    }
}

1 个答案:

答案 0 :(得分:2)

嗯,最简单的解决方法是在另一个线程中运行无限循环,这样它就不会阻塞你的主线程,从而可以接收和处理事件,如下所示:

new Thread(delegate() { 

while(true)
{
 //...
}

}).Start();