2014-05-25 25 views
25

Khi thực hiện chức năng async để nhận dữ liệu cục bộ, truy cập tệp hoặc gọi API, làm cách nào bạn kích hoạt hoạt ảnh tải trong quá trình này, có thể là, thường trình dài?Làm thế nào để bạn hiển thị hoạt ảnh tải cho cửa sổ điện thoại 8.1 ứng dụng lưu trữ phổ dụng?

Dưới đây là một ví dụ:

<Button onClick="Button_Click" /> 

public async void Button_Click(object sender, RoutedEventArgs e) 
{ 
    var myData = await MyDataManager.GetMyData(); 
    await new MessageDiaglog("Data Loaded!").ShowAsync(); 
} 

Vì nó là một ứng dụng lưu trữ phổ biến, tôi giả sử nó cũng làm việc như nhau trong cả hai cửa sổ 8.1 và windows phone 8.1.

CẬP NHẬT TỪ GIẢI PHÁP

mỗi câu trả lời igrali, tôi cập nhật mã của tôi để tham khảo trong tương lai:

<ProgressBar x:Name="LoadingBar" Visibility="Collapsed" IsEnabled="False" IsIndeterminate="true" Height="4" HorizontalAlignment="Stretch"/> 
<Button onClick="Button_Click" /> 

public async void Button_Click(object sender, RoutedEventArgs e) 
{ 
    LoadingBar.IsEnabled = true; 
    LoadingBar.Visibility = Visibility.Visible; 
    var myData = await MyDataManager.GetMyData(); 
    await new MessageDiaglog("Data Loaded!").ShowAsync(); 
    LoadingBar.IsEnabled = false; 
    LoadingBar.Visibility = Visibility.Collapsed; 
} 

Mã này sẽ hoạt động trên cả điện thoại và máy tính bảng.

Trả lời

26

Có một cách khá chuẩn hóa để thực hiện việc này trên Windows Phone. Vì đây là ứng dụng toàn cầu nên có lẽ lựa chọn tốt nhất là hiển thị vòng tiến trình.

Bạn thêm nó vào XAML

<ProgressRing IsActive="True"/> 

Bạn có thể hiển thị nó, hoặc một cách rõ ràng trong mã đằng sau khi nút được nhấn vào, hoặc sử dụng một tài sản bool trong một viewmodel (nếu bạn sử dụng MVVM) và một ValueConverter để hiển thị nó hoặc ẩn nó bằng cách thay đổi một thuộc tính từ true thành false và ngược lại.

Tôi cũng khuyên bạn nên đọc các tài liệu chính thức about progress controls và tôi sẽ kết thúc câu trả lời này với một mẹo từ tài liệu ProgressRing rằng can be found here

Thiết lập thuộc tính IsActive để biến ProgressRing bật hoặc tắt. Nếu IsActive là sai, ProgressRing không được hiển thị, nhưng không gian là dành riêng cho nó trong bố cục UI. Để không đặt chỗ cho ProgressRing, hãy đặt thuộc tính Chế độ hiển thị thành Đã thu gọn.

Mẹo Khi ProgressRing đang hoạt động, hoạt ảnh tiến trình tiếp tục ngay cả khi không hiển thị trên màn hình, chẳng hạn như khi Chế độ hiển thị là Đã thu gọn. Điều này có thể giữ nguyên luồng UI, sử dụng tài nguyên và làm giảm hiệu suất ứng dụng. Khi ProgressRing không hiển thị, bạn nên tắt hoạt ảnh bằng cách đặt IsActive thành false.

+0

Ok tuyệt vời - vì vậy chỉ cần rõ ràng, tôi kích hoạt/hiển thị nó trước cuộc gọi đang chờ và sau đó tắt/ẩn sau cuộc gọi đang chờ? – EdenMachine

+1

@EdenMachine chính xác. –

Các vấn đề liên quan