无限循环时检测按键
本文关键字:检测 无限循环 | 更新日期: 2023-09-27 18:21:30
所以我的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);
}
}
最简单的解决方法是在另一个线程中运行无限循环,这样它就不会阻塞主线程,从而可以接收和处理事件,比如:
new Thread(delegate() {
while(true)
{
//...
}
}).Start();