نماذج Windows ProgressBar: أسهل طريقة لبدء / إيقاف سرادق؟

StackOverflow https://stackoverflow.com/questions/312936

  •  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).

وهوك انها الحدث التجزئة، مقدما ثم تقدم شريط حتى تصل إلى قيمة الحد الأقصى. عندما لا (ضرب كحد أقصى) وأنت لم إنهاء المهمة، إعادة تعيين قيمة شريط التقدم إلى أدنى حد ممكن.

و... تماما مثل ويندوز إكسبلورر: -)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top