2015-08-14 119 views
2

這是我在cs文件中的代碼。當我在不同的地方獲得位置時,我有完全相同的代碼,它的工作原理和Im能夠看到進度條。爲了獲得位置Im在系統托盤中包裝一個異步方法,它可以工作。來此Winodow顯示照片我無法看到當前頁面上的進度指示器如此之多。這是我有的一段代碼。在xaml中,我也有shell:SystemTray.IsVisible =「True」。請幫助爲什麼進度條顯示出來。進度條是否僅適用於異步?這不是完整的代碼,而只是我遇到的問題。謝謝。Windows Phone 8系統托盤未出現

public DisplayPhotos() 
{ 
    InitializeComponent(); 
    this.DataContext = this; 
    SystemTray.ProgressIndicator = new ProgressIndicator(); 
    SystemTray.ProgressIndicator.Text = "Getting Photos"; 
    DisplayPhotos.SetprogressIndicator(true); 
    Display(); //Not an async method. 
    DisplayPhotos.SetprogressIndicator(false); 
} 

private static void SetprogressIndicator(bool value) 
{ 
    SystemTray.ProgressIndicator.IsIndeterminate = value; 
    SystemTray.ProgressIndicator.IsVisible = value; 
} 

回答

2

通常情況下,您將看不到任何UI更新,然後在單個非異步函數調用中進行恢復。 UI只會每「tick」更新一次,所以如果你在同一個函數中顯示和隱藏UI,那麼它將永遠不會顯示。有關如何UI不同步處理時更新理念的詳細信息,請參閱this MSDN page(它是爲WPF寫的,但一般適用於XAML):

請注意,這不是嚴格真實的,獨立動畫的例子發生在一個單獨的線程上,但這是一個一般的經驗法則。

另外我會注意在頁面的構造函數中設置ProgressIndicator,因爲它在某些情況下會失敗(我認爲它是在應用程序中創建的第一個頁面)。您應該等到頁面加載後顯示/隱藏指示器。

+0

我試圖做它在加載事件但它仍然dosent出現。我是否需要爲Display方法啓動一個新線程?謝謝。 – nikhil

+0

您需要讓操作系統在UI線程上做一些工作 - 在「任務」中運行您的代碼將有所幫助。從構造函數移動到'Loaded'事件可能會導致其他問題(我會使用'OnNavigatedTo'覆蓋並確保不會重新加載已加載的內容)。 –

1

有時候,你不會找到用戶界面的變化或一些重型方法調用構造函數中工作。建議使用一些簡單的代碼,例如:在構造函數中註冊事件。

請參考下面的代碼塊,它可以幫助你。

public Page1() 
    { 
     InitializeComponent(); 
     this.Loaded += Page1_Loaded; 
    } 
    void Page1_Loaded(object sender, RoutedEventArgs e) 
    { 
     SystemTray.IsVisible = true; 
     SystemTray.ProgressIndicator = new ProgressIndicator(); 
     SystemTray.ProgressIndicator.Islndeterminate = true; 
     SystemTray.ProgressIndicator.IsVisible = true; 
     Display(); 
     SystemTray.ProgressIndicator.IsVisible = false; 
    } 

在加載的事件中,也可以使用異步函數調用。

==更新==
讓我們嘗試上述代碼爲我工作的另一種方法。請嘗試使用XAML也(只是爲了交叉檢查)

shell:SystemTray.BackgroundColor="Black" 
shell:SystemTray.ForegroundColor="White" 
shell:SystemTray.Opacity="1" 
shell:SystemTray.IsVisible="True"> 

<shell:SystemTray.ProgressIndicator> 
<shell:ProgressIndicator 
Text="Waiting" 
IsIndeterminate="True" 
IsVisible="True" /> 
</shell:SystemTray.ProgressIndicator> 

將這個代碼在你的頁面,只是正式檢查,這不是其他任何導致錯誤。

二,請在代碼方面嘗試,如果上面下面的代碼。您應該一次執行這些操作。

ProgressIndicator progress = new ProgressIndicator 
{ 
    IsVisible = true, 
    IsIndeterminate = true, 
    Text = "Downloading details..." 
}; 
SystemTray.SetProgressIndicator(this, progress); 

只是爲了清楚地瞭解,希望您正在構建的Windows Phone 8的應用程序只,並還適當實施了所有其他的東西。

只是知識,你的「顯示」方法應該花一些時間來執行,因爲如果它執行速度非常快,然後ProgressIndicator可能不可見。

是的,用於測試目的,可以採取調度員採取單獨的UI線程。

+0

我試圖在加載的事件中做它,但仍然出現劑量。我是否需要爲Display方法啓動一個新線程?謝謝。 – nikhil

+0

Nikhil,檢查答案中的更新。如果可能的話,使建設者更輕。 –