We are having a debate here in the office about how to give the user feedback that the app is busy. First of all, most of us are Windows desktop folks and so things like the busy cursor or the startglass cursor come to mind. Some of us don't really care for that as there is an implication from the busy cursor that the app is hung ("Not responding"). The startglass cursor is not available in Silverlight.
The app design is such that we have WCF calls to set/get the ObservableCollection<T> to which the various controls ItemsSource are bound, or the DataContext object to which properties are bound via {Binding Path=..., Mode=...}. As we all know, the results come back asynchronously.
The app's design has a tree on the left and content on the right - the tree on the left is broken into 8 different kinds of objects (8 top-level folders) and then all instances of that type of object beneath the folder.)
We have the following cases:
Case 1 - Application Load
On startup, the tree/menu folder outline is created and 8 WCF calls are made to get the data. The ObservableCollections fill in in some non-deterministic order, but you can see the + signs appear, or if expanded, the actual objects, beneath the tree nodes. Further, if you have the tree node selected, then a summary table view simultaneously fills in.
In this case, as soon as your object is there, you can select it and begin working with it, regardless of the loading order or state of the other objects.
In this case, there is no indication that the app is busy or communicating with the server. Some feel there should be, others do not.
Case 2 - Page refresh
So the summary page mentioned above contains a list with configuration info of all the objects of the type selected in the tree at the left. This is almost always a RadGridView. In a detail mode, you look at a single object which is just a Grid with a bunch of {BInding...} to display data in a form. In both cases, there is a table of events related to the object(s) you are viewing. The objects (or object) and the event are two separate WCF calls. The mouse could be a wait cursor over the entire app (overkill, IMO), or over the individual panels which are refreshing
Case 3 - Modal Dialog / Wizard
Alll configuration changes are done via modal popups/wizards. In this case, the Finish or OK button is grayed out until the WCF callback completes and then the window either goes away (on success) or displays an error (on failure). Given the modality of the dialog and the grayed out button(s), changing the cursor here is of questionable value.
Case 4 - Load-On-Demand
Trees which browse are built using load-on-demand, which uses the animated circular arrow. I think we are all happy with this scenario.
My questions here are what do others do in these situations? If the app can be responsive, I hate to put up a modal "working" (chasing dots, a/k/a loading panels). We could have a discreet version of this at the top right or something and leave the app responsive. Personally I do not care for the wait cursor on the mouse, probably because of the bad taste left in my mouth by unresponsive Windows apps like Visual Studio. I freely admit my bias here ;)
Pointers to best practices, blogs, articles, or personal opinions are all welcome.
Thanks for reading,
Tim
The app design is such that we have WCF calls to set/get the ObservableCollection<T> to which the various controls ItemsSource are bound, or the DataContext object to which properties are bound via {Binding Path=..., Mode=...}. As we all know, the results come back asynchronously.
The app's design has a tree on the left and content on the right - the tree on the left is broken into 8 different kinds of objects (8 top-level folders) and then all instances of that type of object beneath the folder.)
We have the following cases:
Case 1 - Application Load
On startup, the tree/menu folder outline is created and 8 WCF calls are made to get the data. The ObservableCollections fill in in some non-deterministic order, but you can see the + signs appear, or if expanded, the actual objects, beneath the tree nodes. Further, if you have the tree node selected, then a summary table view simultaneously fills in.
In this case, as soon as your object is there, you can select it and begin working with it, regardless of the loading order or state of the other objects.
In this case, there is no indication that the app is busy or communicating with the server. Some feel there should be, others do not.
Case 2 - Page refresh
So the summary page mentioned above contains a list with configuration info of all the objects of the type selected in the tree at the left. This is almost always a RadGridView. In a detail mode, you look at a single object which is just a Grid with a bunch of {BInding...} to display data in a form. In both cases, there is a table of events related to the object(s) you are viewing. The objects (or object) and the event are two separate WCF calls. The mouse could be a wait cursor over the entire app (overkill, IMO), or over the individual panels which are refreshing
Case 3 - Modal Dialog / Wizard
Alll configuration changes are done via modal popups/wizards. In this case, the Finish or OK button is grayed out until the WCF callback completes and then the window either goes away (on success) or displays an error (on failure). Given the modality of the dialog and the grayed out button(s), changing the cursor here is of questionable value.
Case 4 - Load-On-Demand
Trees which browse are built using load-on-demand, which uses the animated circular arrow. I think we are all happy with this scenario.
My questions here are what do others do in these situations? If the app can be responsive, I hate to put up a modal "working" (chasing dots, a/k/a loading panels). We could have a discreet version of this at the top right or something and leave the app responsive. Personally I do not care for the wait cursor on the mouse, probably because of the bad taste left in my mouth by unresponsive Windows apps like Visual Studio. I freely admit my bias here ;)
Pointers to best practices, blogs, articles, or personal opinions are all welcome.
Thanks for reading,
Tim