2016-09-26 34 views
0

我正在開發使用C#和xaml的Windows應用商店8.1應用程序。 當我試圖從隱藏文件的代碼更新UI我得到一個例外是該應用程序稱爲一個接口,該接口被編組爲另一個線程。 Windows 8.1商店應用程序

「的應用程序調用的是被編組爲一個不同的線程的接口」

我已經添加了下面的代碼更新用戶界面

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中。

一旦執行該方法,我該如何在UI中顯示它?

有人可以幫我嗎?

在此先感謝

+0

你沒有'await'的'Task.Delay(1000)'所以下一行(清除消息)立即運行。 –

+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

嗨,如果它解決了您的問題,請標記爲答案,以便其他訪客可以參考它,謝謝! –

相關問題