System.Timer在Metro应用程序中不可用?我可以用什么来代替它?
问题描述:
我想要定期轮询服务器并获取JSON,但出于某种原因,我无法在我写的空白应用程序中看到引用System.Timers。 这是我的代码System.Timer在Metro应用程序中不可用?我可以用什么来代替它?
public MainWindow()
{
timer.Tick += new EventHandler(CheckJson_Click_1);
timer.Interval = 30000; //30sec*1000microsec
timer.Enabled = true;
timer.Start();
}
private async void CheckJson_Click_1(object sender, RoutedEventArgs e)
{
var client = new HttpClient();
client.MaxResponseContentBufferSize = 1024 * 1024;
var response = await client.GetAsync(new Uri("URI"));
var result = await response.Content.ReadAsStringAsync();
var component = JsonObject.Parse(result);
}
任何人都可以让我知道我可以用它代替计时器?
答
System.Timers.Timer
通常设置为在ThreadPool线程上引发事件。如果您现在正在使用该功能,则需要使用新的ThreadPoolTimer
类。
如果您想在UI线程上引发事件,您需要新的DispatcherTimer
,替换为System.Windows.Forms.Timer
。
编辑:您的意见表明您想使用DispatcherTimer,但您遇到代码问题。以下是您对评论中的内容的直接翻译:
public void StartTimer(object o, RoutedEventArgs sender)
{
this.timer = new DispatcherTimer();
// this is an easier way to specify TimeSpan durations
timer.Interval = TimeSpan.FromMilliseconds(100);
// you don't need the delegate wrapper
timer.Tick += checkJson_Tick;
timer.Start();
}
void checkJson_Tick(object sender, EventArgs e)
{
// ...
}
感谢您的回复。这是我现在的代码public void StartTimer(object o,RoutedEventArgs sender) this.timer = new DispatcherTimer(): timer.Interval = new TimeSpan(0,0,0,0,100); // 100毫秒 timer.Tick + = new EventHandler(CheckJson_Click_1); timer.Start(); '但是我有一个错误,说不能将system.eventhandler转换为system.eventhandler
@ james234:看我的编辑。 – 2013-05-06 03:33:34
我现在有以下错误--'Error 'CheckJson_Click1'没有重载匹配委托'System.EventHandler