ボタンをクリックするたびにこのコードが呼び出されます。さて、Telnetを使っているので、Thread.Sleep()を追加しなければならなかったので、このメソッドは5〜7秒で実行されます。c#プログレスバーIsIndeterminateアニメーションがGUIスレッドでスタックされています
プログレスバーのアニメーションを同時に実行して、すべてがうまくいることをユーザーに知らせる方法があるかどうかは疑問でした。
ありがとうございました。
あなたがfalseにIsIndeterminateプロパティを設定し、プログレスバーのアニメーションを提供するために操作を通してプログレスバーの値を指定する必要があります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;
}
UI以外のスレッドで 'Thread.Sleep()'を実行しますか? – Jai
[async/await](https://blogs.msdn.microsoft.com/dotnet/2012/06/06/async-in-4-5-enabling-progress)の背後にある概念を理解すれば、これは非常に簡単に解決できます。 -and-cancellation-in-async-apis /)タスクを実行します。 async/awaitを使用すると、UIまたはプログレスバーをフリーズしているブロックスレッドを防ぐことができます。古いWinFormsアプリケーションで作業するときは、この方法を自分で使います。 – Arman
'rack_Click'メソッドはUIスレッド上で実行されているので、このコードの実行中はどのUI要素も更新できません。実行中にUIを更新できるようにするには、バックグラウンドスレッドでこれを実行する必要があります。 – Enigmativity