2015-11-24 3 views
1

Я довольно новичок в C#, я пытаюсь написать свое собственное приложение UWP, чтобы приостановить работу ПК после пользовательского интервала.Приостановка компьютера

Мне удалось запустить мой таймер, но я изо всех сил пытаюсь понять, как вызвать метод для приостановки работы компьютера. Я попытался с помощью кода предложил here

Application.SetSuspendState(PowerState.Suspend, true, true); 

Но я получаю следующее сообщение об ошибке, когда я пытаюсь построить проект:

CS0117 'Application' does not contain a definition for 'SetSuspendState' SystemTimer C:\Users\xxxxx\Source\Workspaces\Workspace\SystemTimer\SystemTimer\MainPage.xaml.cs 52

я нашел запись MSDN на PowerState, которые свидетельствуют о Я использую библиотеку System.Windows.Form. Я попытался добавить его в пространства имен, но получить сообщение об ошибке, что Form не является доступным пространством имен в System.Windows.

Я чувствую, что я, вероятно, отсутствует что-то фундаментальное, но я не совсем уверен, что это такое.

+0

Какую версию платформы .NET вы настраиваете? – ChrisF

+0

Посмотрите [MSDN] (https://msdn.microsoft.com/en-us/library/system.windows.forms.application.setsuspendstate (v = vs.110) .aspx), и он расскажет вам, какая сборка вы нужно ссылаться, а в каком пространстве имен вы найдете нужные классы. В этом случае вам нужна ссылка на 'System.Windows.Forms.dll', и вам понадобится пространство имен (добавьте с помощью' using' statement) 'System.Windows.Forms' –

+0

Возможный дубликат [C# put pc to sleep или hibernate] (http://stackoverflow.com/questions/2079813/c-sharp-put-pc-to-sleep-or-hibernate) – series0ne

ответ

2

Я чувствую, что я, вероятно, отсутствует что-то фундаментальное, но я не совсем то, что она есть.

Мир приложений (UWP) - это другой мир. Приложение не должно вмешиваться (т. Е. Вмешиваться) со своей базовой системой. В основном вы работаете в изолированной среде, и вы получаете только то, что предоставляется API. Выключение или приостановка работы системы не является частью этого API.

Какие у вас есть варианты? Вероятно, вам лучше, если вы создадите настольное приложение. Затем вы сможете использовать все доступные API-интерфейсы для рабочего стола, включая System.Windows.Form.

+0

Я думаю, что это, вероятно, лучший вариант для меня, когда я пытаюсь познакомиться с окружающей средой. Спасибо! – Burgi

-1

Вы пытались реализовать это с помощью Interop Services?

[DllImport("Powrprof.dll", CharSet=CharSet.Auto, ExactSpelling=true)] 
public static extern bool SetSuspendState(bool hiberate, bool forceCritical, bool disableWakeEvent); 

// Hibernate 
SetSuspendState(true, true, true); 
// Standby 
SetSuspendState(false, true, true); 
+1

Это не сработает, поскольку вы не можете вызвать pinvoke произвольные функции Win32. Доступен только ограниченный набор, см. Https://msdn.microsoft.com/en-us/library/windows/apps/br205757.aspx. Почему это так? Вы бы использовали 'DllImport', ваше приложение больше не будет« универсальным », но сильно привязано к определенной платформе. –

Смежные вопросы