2016-02-16 18 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> 

代码隐藏:

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(); 
    } 

如果你想要的是显示实际的进展,你应该使用X的方法SetProgress报告与价值观的进步从0到1.

0

,我一直在使用来bookend异步操作的某些代码是这样的......

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(); 

,如果你的代码将阻止用户界面线程,它包装到一个新任务中

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