2011-05-08 5 views
2

좋아, 그래서 좀 이상한 행동을 WPF ProgressBar 컨트롤을 어지럽히는 동안 발견. 이 컨트롤은 ListView 컨트롤의 열에 있으며 일반 상황은 본질적으로 this question & answer과 약간 다릅니다. WPF ProgressBar가 너무 빨리 업데이트 될 때 깜박임 - 버그?

내가 분명히 몇 가지 속성 ( Min, Max, Value), 모든 한방향 바인딩에 의해 클래스에 Progressbar을 결합한다. 이 다른 클래스는 다른 스레드에서 업데이트되고 정기적으로 INotifyPropertyChanged 인터페이스를 사용하여 ProgressBar가 상태가 진행 중임을 알립니다. 그리고이 모든 것이 훌륭합니다!

하지만 이상하게 여기는 부분이 있습니다. 내 ProgressBar는 Max (= 100 %) 값에 도달 할 때까지 바로 빛을 잃습니다. 그런 다음 갑자기 녹색 막대 전체에 흰 빛이 나는 물건을 펄싱하기 시작합니다. 이것은 매우 짜증납니다. 나는 진전을 이유와 함께 보여주고 있는데, 일단 맥박이 없다는 사실을 알기 시작하면 실제로 맥이 빠져 나간다.

따라서 디버깅을 시작했습니다. 나는 내 스레드 처리에서 Thread.Sleep(1000)으로 발견, 그것은 여전히 ​​빛을 숨겼지만, 만약 내가 그것을 Thread.Sleep(1500)에 부딪쳤다면 놀랄만 한 활기로 언제나 돌아온다. 그 후 정수 단위 값을 변경하는 데 시간이 오래 걸리므로 진행 단위를 작은 숫자로 변환하려고했습니다. 최소값 0, 최대 값 100에는 여전히 광선이 없습니다. 최소값 0, 최대 값 10은 전체 활력으로 되돌아 왔습니다. 모든 경우에 100 %에 도달하는 데 소요되는 시간과 작업량은 동일하지만, 표시되는 광선에 대해 매우 눈에 띄는 이진 예/아니오 효과입니다. 내가 테스트하지 않은 유일한 것은 ProgressBar가이 ListView 컨트롤 안에 위치하지 않을 때 발생하는지 여부입니다.

나는 (XAML과 관련된) ProgressBar 컨트롤의 깊은 WPF 내부를 이해할 수 없다는 것을 잘 알고 있습니다. 그래서 저는이 사람이 이것이 알려진 버그인지, 비틀 거 렸는지, 또는 해결 방법을 알고 있을지도 모른다고 알고 있습니다.

내 컴퓨터는 Windows 7을 실행하며 .NET Framework 4 Client Profile을 대상으로 VS2010으로 개발 중입니다.

답변

0

진행률 표시 줄을 자주 업데이트하고 있기 때문에 나는 당신이 깜박 할 것이라고 생각합니다. 새 값을 설정할 때마다 진행률 표시 줄이 반짝이는 애니메이션을 다시 시작합니다. (나는 이것을 테스트하지 않았으므로 머리 꼭대기에서 쓰고 있습니다).

당신이 아마 같은 일을 생각하고 그것을 해결하려고 것 같다,하지만 난 당신이 완벽하게 모든 가능성을 소진 확실하지 않다 :

  1. 수표 그 경우 (진행 막대를 만들어보십시오. 값 == newValue)하지 마십시오 progressbar.Value = newValue;
  2. 진행률 막대는 최소, 최대, 값에 대해 소수를 사용해야합니다. 모든 소수점에 대해 업데이트하지 않도록하십시오. - 10,1; 10,2; 10,3; 등등 ... (progressbar.Value = (int) newValue;를 사용하십시오.)
  3. increment = 1 대신 progressbar 값을 크게 설정하십시오.
  4. ListView 외부에서 진행 막대를 가져 가려고 할 수 있습니다. 아마도 그 안에 진행 막대가있는 렌더링 버그가있을 수 있습니다.

PS! 진행 막대를 매우 빠르게 업데이트하면 글로우 애니메이션이 실행되지 않는 것이 좋습니다. 글로우 애니메이션의 목적은 진행률 (막대)이 이동하지 않았음에도 불구하고 응용 프로그램이 여전히 실행 중임을 나타 내기위한 것입니다.
진행 상황이 빠르게 움직이는 경우에는 사용자가 시각적 효과를 얻으므로 그 순간에 광선 애니메이션을 사용할 필요가 없습니다.

관련 문제