c# – WinForms application crashes if computer goes into hibernation

Question:

I have an application in winforms , which is on the company's server, so I pull the shortcut to the desktop and the employee runs normally.

The problem started to happen, when we exchanged some computers (Desktop) for notebook's, when the notebook goes into hibernation, when the application returns, it stops working.

At the moment, I do a workaround, which detects when windows is about to go into hibernation and terminate the application, but that's not quite right…

Anyone have another alternative? or could you give me any tips?

Answer:

You can make your application not allow windows to hibernate while it is open. Something like:

public partial class Window1 : Window
{
    private uint m_previousExecutionState;

    public Window1()
    {
        InitializeComponent();

        // Set new state to prevent system sleep (note: still allows screen saver)
        m_previousExecutionState = NativeMethods.SetThreadExecutionState(
            NativeMethods.ES_CONTINUOUS | NativeMethods.ES_SYSTEM_REQUIRED);
        if (0 == m_previousExecutionState)
        {
            MessageBox.Show("Call to SetThreadExecutionState failed unexpectedly.",
                Title, MessageBoxButton.OK, MessageBoxImage.Error);
            // No way to recover; fail gracefully
            Close();
        }
    }

    protected override void OnClosed(System.EventArgs e)
    {
        base.OnClosed(e);

        // Restore previous state
        if (0 == NativeMethods.SetThreadExecutionState(m_previousExecutionState))
        {
            // No way to recover; already exiting
        }
    }
}

internal static class NativeMethods
{
    // Import SetThreadExecutionState Win32 API and necessary flags
    [DllImport("kernel32.dll")]
    public static extern uint SetThreadExecutionState(uint esFlags);
    public const uint ES_CONTINUOUS = 0x80000000;
    public const uint ES_SYSTEM_REQUIRED = 0x00000001;
}
Scroll to Top