ProgressBar不反映价值变化C#

时间:2016-06-13 23:17:37

标签: c# xaml progress-bar

我是XAML和c#的新手,我正在试图弄清楚如何更新进度条。

我在XAML中有以下代码:

<Hyperlink Click="Launch_Click">Launch Program</Hyperlink>
<ProgressBar  x:Name="Progress1" x:Uid="Progress1" Minimum="0" Maximum="1" Value="0">

在C#中实现Launch_Click

private void Launch_Click(object sender, RoutedEventArgs e)
{
    for(int i = 0; i<10; i++)
    {
        Progress1.Value +=0.1;
    }

}

当我运行调试器时,Progress1.Value似乎正确更新,但在执行Launch_Click完成之前,进度条似乎似乎没有反映此更改。如何使进度条反映更改为Progress1.Value更新?

1 个答案:

答案 0 :(得分:1)

Asynchrony证明对于访问UI线程的应用程序特别有价值,因为所有与UI相关的活动通常共享一个线程。如果在同步应用程序中阻止了任何进程,则会阻止所有进程。您的应用程序停止响应,您可能会认为它已失败,而不是等待它。

使用异步方法时,应用程序将继续响应UI。例如,您可以调整窗口大小或最小化窗口,或者如果您不想等待它完成,则可以关闭该应用程序。

C#中的asyncawait关键字是异步编程的核心。通过使用这两个关键字,您可以使用.NET Framework或Windows运行时中的资源创建异步方法,就像创建同步方法一样简单。使用async和await定义的异步方法称为异步方法。

所以您只需要像这样更改代码

public async void button1_Click( object sender , EventArgs e)
{
    for(int i=0;i<100;i++)
    {
        Progress1.Value +=1;
        await Task.Delay(10);
    }
}