2016-02-16 1 views
1

У меня проблема с mahapps, отображается метод ShowProgressAsync, но не показывает загрузочные гранулы внизу. Я думаю, что проблема заключается в том, что рендеринг остается синхронным.mahapps ShowProgressAsync не показывает загрузчик асинхронный - WPF (C#)

Может ли кто-нибудь дать мне решение? Я изо всех сил пытаюсь найти проблему.

Xaml:

<controls:MetroWindow x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WpfApplication1" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Button Content="Clicca" Width="150" Click="Button_Click" Height="50"></Button> 
    </Grid> 
</controls:MetroWindow> 

Codebehind:

using MahApps.Metro.Controls; 
using MahApps.Metro.Controls.Dialogs; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : MetroWindow 
    { 
     ProgressDialogController x; 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private async void Button_Click(object sender, RoutedEventArgs e) 
     { 
      x = await this.ShowProgressAsync("test","loading", false) as ProgressDialogController; 
     } 
    } 
} 

Они должны выйти в нижней части кадра, которые текут, но остаются заблокированными

+0

У меня такая же проблема. Неопределенный бар не отображается даже при вызове x.SetIndeterminate(); – Beachwalker

ответ

2

Делать вы имеете в виду, что хотите установить индикатор прогресса как неопределенный? Если это так, то вам не хватает вызов метода сразу после ShowProgressAsync

private async void Button_Click(object sender, RoutedEventArgs e) 
    { 
     x = await this.ShowProgressAsync("test", "loading", false) as ProgressDialogController; 
     x.SetIndeterminate(); 
    } 

Если то, что вы хотите, чтобы показать реальный прогресс, вы должны использовать метод SetProgress х сообщить о достигнутом прогрессе со значениями от 0 до 1.

0

код, который я использую для форзац асинхронных операций это ...

var x = await this.ShowProgressAsync("Please wait", "Doing Something..."); 
// Your Code Here. 
await x.CloseAsync().ConfigureAwait(false); 

Если вы просто хотите, чтобы появляться, скажу на 1 секунду, а затем использовать ...

var x = await this.ShowProgressAsync("Please wait", "Waiting for 1 second."); 
await Task.Delay(1000); 
await x.CloseAsync().ConfigureAwait(false); 
0

Ваш рабочий код не должен блокировать поток пользовательского интерфейса для того, чтобы позволить ProgressWindow для отображения

var controller = await this.ShowProgressAsync("Please wait", "Doing Something..."); 
// Your code here 
await controller.CloseAsync(); 

если ваш код будет блокировать UI тему, завернуть его в новой задаче

var controller = await this.ShowProgressAsync("Please wait", "Doing Something...") 
await Task.Run(() => 
{ 
    // Your code here 
} 
await controller.CloseAsync(); 
Смежные вопросы