نماذج Windows ProgressBar: أسهل طريقة لبدء / إيقاف سرادق؟
-
10-07-2019 - |
سؤال
وأستخدمه C # و نماذج Windows. لدي شريط التقدم الطبيعي تعمل بشكل جيد في البرنامج، ولكن الآن لدي عمل آخر حيث مدة لا يمكن أن تحسب بسهولة. أود أن عرض شريط التقدم ولكن لا أعرف أفضل طريقة لبدء / إيقاف سرادق التمرير. كنت اتمنى لشيء بسيط مثل وضع سرعة سرادق ثم بعد بداية () ووقف () ولكن لا يبدو أن يكون بهذه البساطة. هل لديك لتشغيل حلقة فارغة في الخلفية؟ كيف يمكنني الأفضل القيام بذلك؟ بفضل
المحلول
استخدم شريط تقدم مع نمط المقرر أن Marquee
. وهذا يمثل شريط التقدم غير محدد.
myProgressBar.Style = ProgressBarStyle.Marquee;
ويمكنك أيضا استخدام MarqueeAnimationSpeed
و> الملكية لتعيين المدة التي سوف تتخذ كتلة صغيرة من لون لتحريك عبر شريط التقدم المحرز الخاص بك.
نصائح أخرى
لبدء / إيقاف الرسوم المتحركة، يتعين عليك أن تفعل هذا:
لبدء:
progressBar1.Style = ProgressBarStyle.Marquee;
progressBar1.MarqueeAnimationSpeed = 30;
لوقف:
progressBar1.Style = ProgressBarStyle.Continuous;
progressBar1.MarqueeAnimationSpeed = 0;
وانها ليست كيفية عملها. أنت "بداية" لسرادق شريط تقدم نمط من خلال جعلها مرئية، يمكنك إيقاف من قبل إخفائه. هل يمكن تغيير خاصية النمط.
وهذا الرمز هو جزء من نموذج تسجيل دخول حيث ينتظر المستخدمين لخادم المصادقة للرد.
using System;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;
namespace LoginWithProgressBar
{
public partial class TheForm : Form
{
// BackgroundWorker object deals with the long running task
private readonly BackgroundWorker _bw = new BackgroundWorker();
public TheForm()
{
InitializeComponent();
// set MarqueeAnimationSpeed
progressBar.MarqueeAnimationSpeed = 30;
// set Visible false before you start long running task
progressBar.Visible = false;
_bw.DoWork += Login;
_bw.RunWorkerCompleted += BwRunWorkerCompleted;
}
private void BwRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// hide the progress bar when the long running process finishes
progressBar.Hide();
}
private static void Login(object sender, DoWorkEventArgs doWorkEventArgs)
{
// emulate long (3 seconds) running task
Thread.Sleep(3000);
}
private void ButtonLoginClick(object sender, EventArgs e)
{
// show the progress bar when the associated event fires (here, a button click)
progressBar.Show();
// start the long running task async
_bw.RunWorkerAsync();
}
}
}
وهناك لطيفة المقالة مع رمز على هذا الموضوع على MSDN . أفترض أن تعيين الخاصية نمط لProgressBarStyle.Marquee غير المناسب (أو هو أن ما تحاول السيطرة؟ - أنا لا أعتقد أنه من الممكن لوقف / بدء هذه الرسوم المتحركة على الرغم من أنك يمكن التحكم في سرعة كما يشيرPaul).
والعديد من الإجابات جيدة هنا بالفعل، على الرغم من أنك تحتاج أيضا إلى أن نضع في اعتبارنا أنه إذا كنت تفعل الطويلة الأمد المعالجة على موضوع UI (عموما فكرة سيئة)، فإنك لن ترى سرادق تتحرك أيضا.
ويمكنك استخدام الموقت (System.Windows.Forms.Timer).
وهوك انها الحدث التجزئة، مقدما ثم تقدم شريط حتى تصل إلى قيمة الحد الأقصى. عندما لا (ضرب كحد أقصى) وأنت لم إنهاء المهمة، إعادة تعيين قيمة شريط التقدم إلى أدنى حد ممكن.
و... تماما مثل ويندوز إكسبلورر: -)