Почему компьютер засыпает, портит мою программу WPF и что с этим делать - PullRequest
2 голосов
/ 29 сентября 2011

У меня есть программа WPF, которая связывается со специализированной флешкой USB, которая собирает данные (фактически USB-ключ ANT). Я заметил, что сбор данных просто прекратился через несколько часов. Причина была очевидна в журналах Windows (система), где в то время, когда программа перестала получать данные, я вижу: Система входит в сон Причина сна: простоя системы

Вопросы * * 1003

  1. Как программно предотвратить переход Windows в спящий режим, чтобы я мог продолжить сбор данных?

2. Отступив назад к большому взгляду на будущее ... Что происходит? Почему компьютер, который засыпает, влияет на мою программу? Или это только влияет на флешку? Нужно ли предотвращать сон или лучше заняться чем-то другим?

Ответ Эйнштейна мучительно близок. Я просто не могу заставить SetThreadExecutionState работать в моей C # / WPF-программе и не могу найти много примеров или обсуждений этого. Нужно ли его вызывать более одного раза? Если так, то как? Есть ли событие, которое я получаю, которое говорит мне позвонить или я должен звонить так часто (5 минут?), Как предложено в: /7129928/setthreadexecutionstate-ne-rabotaet-pri-vyzove-iz-sluzhby-windows Сейчас я просто зайду в панель управления ctrl -> power и не буду спать, но было бы неплохо иметь элегантное решение. Даже на моем собственном компьютере я не хочу связываться с настройками сна. Слишком сложно запомнить их снова!

Ответы [ 3 ]

2 голосов
/ 29 сентября 2011

Вы можете запретить компьютеру переходить в режимы пониженного энергопотребления (спящий режим / режим ожидания) с помощью функции SetThreadExecutionState .

Поскольку переход в режим низкого энергопотребления прерывает сбор данных- хорошо, Windows приостанавливает все процессы в этих режимах, и порты USB переходят в режим низкого энергопотребления, что, вероятно, означает, что ваше устройство USB также не будет иметь питания.Это по замыслу.В конце концов, единственная причина, по которой мы хотим, чтобы наши компьютеры переходили в спящий режим, заключается в том, чтобы батарея не разряжалась.

1 голос
/ 29 сентября 2011

Вы можете применить вышеуказанные ответы, o просто зайдите в Панель управления -> Параметры электропитания и измените настройки, чтобы ваша система никогда не переходила в спящий режим.

0 голосов
/ 29 сентября 2011

до 1): вы можете использовать SystemParametersInfo с одним из значений, связанных с энергопотреблением, в версиях Windows, меньших, чем Vista, для включения / выключения настроек энергосбережения. Начиная с Vista, вам следует зарегистрировать одно из событий питания , и ОС сообщит вам, когда это необходимо для запрашиваемого вами события.

Ко 2): Если ОС выключается, аппаратное обеспечение, которым она управляет, выключается. Что еще можно ожидать? Если ОС запускает драйвер USB-устройства, который запускает USB-устройство, что, по вашему мнению, произойдет, если ОС перейдет в спящий режим? USB-устройство начинает работать самостоятельно без драйвера?

...