我已经阅读了一些关于 Timer 的主题,并发现 System.Timers.Timer 已经实现了线程。所以我使用了 Dispatcher.Invoke,但我的 Timer 仍然冻结我的窗口。
我的代码:System.Timers.Timer
int seconds = 5;
Timer timerGetSong = new Timer();
timerGetSong.Elapsed += (o, args) => GetSongTimer();
timerGetSong.Interval = 1000*seconds;
计时器触发的下一个方法:
private void GetSongTimer()
{
Dispatcher.Invoke(GetLastFmCurrentSong);
}
最后一个方法是从网络上解析并为我的 TextBlock 赋值......这意味着在赋值之前需要 1-2-3 秒来解析:
private void GetLastFmCurrentSong()
{
CQ dom = CQ.CreateFromUrl("http://www.last.fm/user/nukec");
string listeningNow = dom["#recentTracks:first .dateCell:first"].Text();
string track;
if (listeningNow.Contains("Listening now"))
{
track = dom["#recentTracks:first .subjectCell:first"].Text();
track = track.Replace('\n', ' ');
}
else
{
track = "Not listening anything";
}
TextBlockNameSong.Text = track;
}
所以窗口在那段时间冻结。如何正确实施?谢谢