2016-09-26 23 views
0

私はC#とxamlを使用してWindowsストア8.1アプリケーションを開発しています。 iは、ファイルの後ろにコードからUIを更新しようとした場合、私は以下のコードを追加したアプリケーションは、別のスレッド用にマーシャリングされたインターフェイスを呼び出しました。窓8.1のストアアプリ

「アプリケーションが別のスレッドのために整列されたインターフェースと呼ばれる」例外を得UIを更新する

await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
       () => 
       { 
        statustextblk.Text = "Offline sync in progress..."; 
       } 
       ); 

これは問題なく動作しています。しかし、私はオフライン同期が完了した後、同じtextblackを更新したい。したがって、このために、私は以下のコードを書いて、コードがこの

await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
       () => 
       { 
        statustextblk.Text = "Offline sync in progress..."; 
       } 
       ); 

await SharedContext.Context.OfflineStore.ScheduleFlushQueuedRequestsAsync(); 
       Debug.WriteLine("Refresh started"); 

       if (SharedContext.Context.OfflineStore != null && SharedContext.Context.OfflineStore.Open) 
        await SharedContext.Context.OfflineStore.ScheduleRefreshAsync(); 


       RefreshSuccess = true; 
       await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
       () => 
       { 
        statustextblk.Text = "Offline sync completed..."; 
        Task.Delay(1000); 
        statustextblk.Text = ""; 
       } 
       ); 

のように見えます。しかし、表示されていない「オフライン同期が完了した...」というメッセージをUIに。

メソッドが実行されたらどのように表示することができますか?

誰かお手伝いできますか?事前に

おかげ

+0

あなたは '(1000)' Task.Delayをawait'ませんでした( 'メッセージをクリアします)次の行は、すぐに実行されますので。 –

+0

ちょっとレイモンド..あなたの返事をありがとう。このメッセージはUIに「オフライン同期が完了しました...」と表示されません。私はTask.Delay(1000)とコメントしました。この行も同様に –

答えて

3

あなたはTask.Delay(1000)、コメント場合は、非常に短い時間内に表示されますが、あなたはstatustextblk.Textを設定しているため、すぐに消えます「...完了オフライン同期」=「」 。

したがって、コメントで@Raymondが言ったことができます。 Task.Delay(1000)の前に修飾子 'async' before()=>と修飾子 'await'を追加します。 あなたが私には、以下のように作られたデモを参照することができます。

private async void Button_Click(object sender, RoutedEventArgs e) 
    { 
     await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
      () => 
      { 
       statustextblk.Text = "Offline sync in progress..."; 
      } 
      ); 

     Debug.WriteLine("Refresh started"); 

     await Task.Delay(1000); 

     //RefreshSuccess = true; 
     await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
     async() => 
     { 
      statustextblk.Text = "Offline sync completed..."; 
      await Task.Delay(1000); 
      statustextblk.Text = ""; 
     } 
     ); 
    } 
+0

お返事ありがとうございました。私はこれをチェックします.. –

+0

こんにちは、あなたの問題を解決すれば、他の訪問者がそれを参照できるよう、答えとしてマークしてください、ありがとう! –

関連する問題