Windows Forms ProgressBar : 선택 윤곽을 시작 / 중지하는 가장 쉬운 방법?


79

C # 및 Windows Forms를 사용하고 있습니다. 프로그램에서 정상적으로 작동하는 진행률 표시 줄이 있지만 이제는 기간을 쉽게 계산할 수없는 다른 작업이 있습니다. 진행률 표시 줄을 표시하고 싶지만 스크롤 선택 윤곽을 시작 / 중지하는 가장 좋은 방법을 모르겠습니다. 나는 윤곽 속도를 설정하고 start () 및 stop ()을 갖는 것과 같은 간단한 것을 기대했지만 그렇게 간단하지 않은 것 같습니다. 백그라운드에서 빈 루프를 실행해야합니까? 어떻게하면 최선을 다할까요? 감사


3
다음은 진행률 표시 줄 유형 선택에 대한 멋진 기사입니다. msdn.microsoft.com/en-us/library/windows/desktop/aa511486.aspx
Matthew Lock

답변:


114

스타일이로 설정된 진행률 표시 줄을 사용합니다 Marquee. 이것은 불확실한 진행률 표시 줄을 나타냅니다.

myProgressBar.Style = ProgressBarStyle.Marquee;

MarqueeAnimationSpeed속성을 사용 하여 진행률 표시 줄에서 작은 색상 블록을 애니메이션하는 데 걸리는 시간을 설정할 수도 있습니다 .


27
'비주얼 스타일'이 활성화되어 있지 Marquee않으면이 렌더링되지 않습니다. 사용을 활성화하려면Application.EnableVisualStyles();
Pooven 2013 년

57

애니메이션을 시작 / 중지하려면 다음을 수행해야합니다.

시작한다:

progressBar1.Style = ProgressBarStyle.Marquee;
progressBar1.MarqueeAnimationSpeed = 30;

그만하다:

progressBar1.Style = ProgressBarStyle.Continuous;
progressBar1.MarqueeAnimationSpeed = 0;

7
MarqueeAnimationSpeed중지 할 때 설정할 필요가 없으며 시작할 때 일반적으로 합리적인 값을가집니다. 시작할 때마다 설정할 필요가 없습니다.
icktoofay

9

작동 방식이 아닙니다. 선택 윤곽 스타일 진행률 표시 줄을 표시하여 "시작"하고 숨기면 중지합니다. Style 속성을 변경할 수 있습니다.


8

이 코드는 사용자가 인증 서버의 응답을 기다리는 로그인 양식의 일부입니다.

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();
        }
    }
}    

2

MSDN에이 주제에 대한 코드 가 포함 된 멋진 기사 가 있습니다. Style 속성을 ProgressBarStyle.Marquee로 설정하는 것이 적절하지 않다고 가정하고 있습니다 (또는 제어하려는 것이 맞습니까 ??-속도를 제어 할 수 있지만이 애니메이션을 중지 / 시작할 수 없다고 생각합니다. @Paul이 나타내는대로).


2

여기에 이미 많은 좋은 답변이 있지만 UI 스레드에서 장기 실행 처리를 수행하는 경우 (일반적으로 나쁜 생각) 마키가 움직이는 것을 볼 수 없다는 점을 명심해야합니다.


-3

Timer (System.Windows.Forms.Timer)를 사용할 수 있습니다 .

Tick ​​이벤트를 연결하고 최대 값에 도달 할 때까지 진행 표시 줄을 진행합니다. 작업을 마치고 작업을 완료하지 않은 경우 (최대 값에 도달) 진행률 표시 줄 값을 다시 최소값으로 재설정하십시오.

... Windows 탐색기처럼 :-)


2
이것은 "진행을 다시 시작하지 마십시오."위반입니다. 그리고 나쁜 UI / UX. 참조 : msdn.microsoft.com/en-us/library/windows/desktop/…
urbanhusky 2014-06-10
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.