c#进度条IsIndeterminate动画卡在GUI线程中

时间:2016-06-15 02:25:01

标签: c# wpf multithreading

我在下面的代码中点击按钮时会调用此代码。现在,由于它使用Telnet而且我不得不添加一堆Thread.Sleep(),这个方法需要5-7秒才能执行。

我想知道是否有一种方法可以在此次运行的同时获得进度条的动画,让用户知道一切都很好。

感谢。

private void rack_Click(object sender, RoutedEventArgs e)
            {
                progressBar.IsIndeterminate = true;

                // Extrait le nom du rack sélectionné 
                selectedRack = (sender as Button).Content.ToString().ToLower();

                // Console Update
                console.Text += "Connexion en cours...";

                // Ouvre la connection au PDU
                clientPDU = this.getConnectionPDU();

                // S'assure que la connection fut éffectué correctement
                if (clientPDU != null)
                {
                    // Disable les autres racks
                    for (int i = 65; i < 71; i++)
                    {
                        Button btn = (Button)FindName("rack_" + ((char)i));
                        if (btn.Content.ToString().ToLower() != selectedRack)
                            btn.IsEnabled = false;
                    }

                    // Active Rafraichir et Déconnecter
                    refresh.IsEnabled = true;
                    disconnect.IsEnabled = true;

                    // Console Update
                    console.Text += "\nConnexion établie";

                    // Mettre à jour les Port qui sont ouvert/fermé
                    this.getPortStatus();

                    // Active les boutons en correspondance à ce qui est On et Off
                    this.setButtonStatus();
                }
                else
                {
                    // Console Update
                    console.Text += "\n\nConnexion Impossible. Veuillez réessayer...\n";
                }

                // Scroll to end
                scroller.ScrollToEnd();

                progressBar.IsIndeterminate = false;
            }

1 个答案:

答案 0 :(得分:0)

您需要将IsIndeterminate属性设置为false,并在整个操作中指定进度条的值,以便提供进度条的动画。:

progressBar.IsIndeterminate = false;
// set the maximum for the progressBar
progressBar.Maximum = 100;
// do work and increment value
progressBar.Value++;

以下页面有一个ProgressBar的示例,其中IsIndeterminate属性设置为true,以及动画的外观图片(它不提供真实的用户反馈)。该页面还有一个IsIndeterminate设置为false的示例,但必须指定值。在此示例中,工作在单独的线程上完成,以便在执行工作时允许UI交互。

http://www.wpf-tutorial.com/misc-controls/the-progressbar-control/