EatATaco
EatATaco

Reputation: 709

How do I gracefully handle hibernate/sleep modes in a winforms application?

I am writing a windows form application in .net using C#.

I am running into a problem that if my program is running when the computer goes into the sleep and/or hibernate state (I am not sure at this time which one, or if both, cause the problem), when the machine wakes up again the program just hangs. The only way to exit out of it is to kill the process from the task manager.

This is, for obvious reasons, not the way I want the program to function. Even if I just shut the program down when it goes into these states, that would be fine, but I am not quite sure how to do this or if there is a more graceful way altogether of handling this.

Upvotes: 17

Views: 5964

Answers (3)

EatATaco
EatATaco

Reputation: 709

You need:

using Microsoft.Win32;   

And this is the code:

 void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
    {
        if(e.Mode == PowerModes.Suspend)
        {
            this.GracefullyHandleSleep();
        }
    }

This is what I went with.

Upvotes: 9

Christian Schwarz
Christian Schwarz

Reputation: 300

Handling those events may be a work-around. But before applying this kind of work-around I'd try to figure out what the application was doing when the OS went into hibernate.

Occurs hanging although application was just idle?

Is the application doing some kind of low-level work (communication with device drivers or external hardware) that should not be interrupted?

Does the application use some kind of network connection?

Upvotes: 6

msergeant
msergeant

Reputation: 4801

This article covers listening for those events. You'll have to do something like override WndProc and listen for PBT_APMSUSPEND events.

Upvotes: 2

Related Questions