2

サーバーをポーリングして定期的に JSON を取得しようとしていますが、何らかの理由で、作成中の空白のアプリで System.Timers の参照が表示されません。これは私のコードです

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);     
}

タイマーの代わりに使えるものを誰か教えてもらえますか?

4

1 に答える 1

3

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)
{
    // ...
}
于 2013-05-06T02:29:08.110 に答える