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) 
{ 
    // ... 
} 
+0

感谢您的回复。这是我现在的代码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 。我现在有点困惑。谢谢 – 2013-05-06 02:52:03

+0

@ james234:看我的编辑。 – 2013-05-06 03:33:34

+0

我现在有以下错误--'Error 'CheckJson_Click1'没有重载匹配委托'System.EventHandler ' – 2013-05-06 03:47:42