0

I have a WPF program which handles large amounts of data at once which is being done using a BackgroundWorker. This updates its progress to a ProgressBar but with larger sets of data the bar can often remain static.

What are effective ways of reassuring the user the program hasn't frozen and is still working?

Currently, to reassure myself I have the window's Title being each index of this array in turn: ["|", "/", "-", @"\"]. With a 100 tick delay between each change it creates a sort of ASCII spinner. But I want something better for the actual users.

EDIT

Is there an easy way to add the glowing effect to the 'complete' part of the ProgressBar you often see?

Toby Smith
  • 1,505
  • 2
  • 15
  • 24
  • 1
    Maybe the wait cursor? – rory.ap Feb 15 '17 at 14:29
  • But wouldn't a program that *has* frozen do that? – Toby Smith Feb 15 '17 at 14:30
  • Maybe just place a label that says e.g. "This process may take a few minutes..." – FCin Feb 15 '17 at 14:30
  • 1
    No, you control the cursor. Wouldn't you want to? It would be annoying if your application decided when to use whatever cursor. – rory.ap Feb 15 '17 at 14:30
  • @user3075190 Yes, but if you already have a progressBar to show it has not "frozen" then whats the problem? You can keep changing the cursor from "wait" to "arrow" back to "wait" as you do steps in your methods, maybe? Can you provide an example of the "glowing effect' you're looking for? – Rinktacular Feb 15 '17 at 14:33
  • Agree with @rory.ap here, control the cursor and keep the app responsive (by keeping everything running in a background worker). You can look at using different animated progress bars. – SQLMason Feb 15 '17 at 14:34
  • 4
    I'm voting to close this question as off-topic because it is a UX question, rather than a programming problem. If you know what UX you want to create and have a problem related to how to implement it, then it may be on topic here. – Servy Feb 15 '17 at 14:34
  • I think like when windows copy you can show names or details about whats going on .. I also noticed in one google app, during the download it was showing it like 45.04% because the file was large, which I think is also a good idea – A Khudairy Feb 15 '17 at 14:34
  • 1
    https://social.msdn.microsoft.com/Forums/en-US/ebc1c34c-5ef3-4196-9975-8c1cfa0ebbfd/animated-progress-bar?forum=wpf – SQLMason Feb 15 '17 at 14:35
  • 1
    @rory.ap No? You, as a user, don't turn your cursor from an arrow to an hourglass. You move your cursor around on the screen, and choose when to click it, but it is the application that it's currently hovering over that determines which "mode" the cursor shows as being in. – Servy Feb 15 '17 at 14:35
  • 2
    @Servy -- UX is a subset of programming. And the user seems to have a problem. I've seen questions with a far looser definition of "problem" survive closure. – rory.ap Feb 15 '17 at 14:36
  • BusyIndicator: http://wpftoolkit.codeplex.com/wikipage?title=BusyIndicator&referringTitle=Home – SQLMason Feb 15 '17 at 14:36
  • @rory.ap UX design is *not* a subset of programming. Implementing a particular UX is a subset of programming. The question isn't asking how to implement a particular UX feature/problem, it's asking how to design the UX. That's an entirely separate field. – Servy Feb 15 '17 at 14:37
  • @Servy -- "You" as in the programmer, not the user (I thought that was pretty obvious). – rory.ap Feb 15 '17 at 14:37
  • JUST READ THIS BLOG: https://elegantcode.com/2011/10/07/extended-wpf-toolkitusing-the-busyindicator/ – SQLMason Feb 15 '17 at 14:38
  • @DanAndrews -- woah, settle down. No need to shout. – rory.ap Feb 15 '17 at 14:39
  • Above all else, keep the UI responsive. This means making background tasks that are running on the UI thread into async operations. If you need to, put up a [busy indicator](https://wpftoolkit.codeplex.com/wikipage?title=BusyIndicator&referringTitle=Home) to let the user know that something is happening, but do not block the UI thread, or the thing won't move. – Lynn Crumbling Feb 15 '17 at 14:48
  • If you're looking for a glow, this post probably has a good starting point for you. The answer that shows gradient brushes, with a blue preview. It looks like it needs some work after the 4th step in his preview, but I think everything you need is in there. You may need to adjust if you're looking for a 100% glow, or some other display, but if I understand your question right this is a good starting point: http://stackoverflow.com/questions/17672058/windows-8-wpf-progress-bars-dont-have-glow-animation – Aaron Feb 15 '17 at 15:15
  • I have a sense that you actually have frozen the UI. If so, you consider not doing that. You should let the user do other, unrelated things while waiting but always allow at least closing the program. – Tom Blodget Feb 16 '17 at 00:18
  • @TomBlodget I don't have a frozen UI - Like I said in the question, I have an ASCII spinner in the window's Title, I just want something better for the finished product. – Toby Smith Feb 16 '17 at 15:30

1 Answers1

0

If possible add a second ProgressBar. One for the overall progress (which you already have) and one for the progress of the current step.

Alternatively, you could put a text somewhere that says "Processing item 1234 of 123123123" that would update with every item that is being processed. This way the user will see the changing number.

Sylence
  • 2,975
  • 2
  • 24
  • 31
  • In the end, I went for a Label over the centre of the Progress Bar with the `(currentByteOfData / 100) + "/" + (totalBytesOfData / 100)` – Toby Smith Feb 16 '17 at 15:32