0

私は Windows 8 アプリを持っていて、15 秒ごとにリソースにクエリを実行してステータスの変更 (Web サービス URL へのアクセス) を求めたいと考えています。結果は、UI (XAML) にバインドされている ViewModel プロパティに書き込む必要があります。

ページを離れると、タスクは終了するはずです。

バックグラウンド タスクを確認しましたが、このページ固有のタスクにはやり過ぎのようです。

Task.Run() と Dispatcher も試してみましたが、while ループで動作させることができませんでした。

何か案は?

4

2 に答える 2

1

x 秒ごとに何らかのアクションを実行する場合は、タイマーを使用する必要があります。WinRT UI スレッドで実行したいので、正しいのはWindows.UI.Xaml.DispatcherTimer.

ページを離れるときはStop()、タイマーを使用して、そのTickイベントの発生を停止する必要があります。

awaitイベントハンドラーで何かしたい場合は、それを作成する必要がありますasync。たとえば、次のようになります。

timer.Tick += async (s, e) =>
{
    var client = new HttpClient();
    var response = await client.GetAsync(…);
    …
}

これでメソッドが作成されますasync void。イベント ハンドラーを作成している場合を除いて、これを行うことはほとんどないことに注意してください。

于 2013-02-11T15:16:52.070 に答える
0

UI スレッドのDispatcherを操作する必要があります。静的メンバーに保存してどこからでも取得するか、アクティブな UI からその場で直接取得することができます。ただし、Dispatcherを取得したら、 RunAsyncメソッドを呼び出す (そして待機する) ことができます。

await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
    new CoreDispatcherPriority(), action);

アクションとして、たとえばラムダ式またはその他の事前定義されたアクションを使用できます。このアクションでは、UI バインド要素を操作できます。お役に立てば幸いです。

于 2013-02-11T13:54:15.573 に答える