Here are the basic events I want to happen when my WPF application starts. This is very similar to how Word starts on my machine.
Everything works fine except for the displaying of the busy cursor prior to the splash screen being displayed. When I execute the application through a shortcut, the wait cursor flashes, but soon goes back to the default. I've tried different ways to set the Cursor but none work, but I think the problem is that I'm not in a control/window--I'm doing it from within App.xaml.cs. And, the properties I'm setting seem to be Windows Forms properties. Here is an excerpt from my code in App.xaml.cs.
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); System.Windows.Forms.Application.UseWaitCursor = true; //System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor; //System.Windows.Forms.Application.DoEvents(); Initialize(); SplashWindow splash = new SplashWindow(); splash.Show(); System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default; // Right now I'm showing main window right after splash screen but I will eventually wait until splash screen closes. MainWindow main = new MainWindow(); main.Show(); }
Hourglass Cursor [C#] If you want to change the mouse cursor at application level use static property Current of Cursor class. To show hourglass cursor assign value Cursors. WaitCursor. To return back the default behavior (to display control specific cursor) assign back value Cursors.
UseWaitCursor = true; This shows the wait cursor for the specified Form or Control and all its child controls until you set the UseWaitCursor property to false. If your operation blocks input not just in one window but for your entire application, you can set the Application.
This should work
Mouse.OverrideCursor = System.Windows.Input.Cursors.Wait;
Use System.Windows.Input
not System.Windows.Forms
.
If you have a task that takes a significant amount of time, and it is running on a non-GUI thread, (which is a good idea) you can use this code to change the application cursor:
Application.Current.Dispatcher.Invoke(() => { Mouse.OverrideCursor = Cursors.Wait; });
When the busy process completes, use this:
Application.Current.Dispatcher.Invoke(() => { Mouse.OverrideCursor = null; });
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With