基本的なインターフェイス
主な機能
指定した時間後に実行シャットダウン|ハイバネート|再起動操作の、サポートはキャンセル。
アイデアの実現
使用Prism
MVVMを主に使用していますモード、達成を支援するためにBindableBase
及びDelegateCommand
これらの2つのカテゴリ。
オフ|睡眠|使用して再起動しますShutdown.exe
。抽出された実装コードをIPowerManager
このインタフェースは、WinPowerManager
このクラスが実装機能。
namespace WinPowerHelper.Core.Interfaces
{
using System;
public interface IPowerManager
{
/// <summary>
/// 立刻关机
/// </summary>
void Shutdown();
/// <summary>
/// 等待<param name="interval"></param>时间后关机
/// </summary>
/// <param name="interval"></param>
void Shutdown(TimeSpan interval);
/// <summary>
/// 让电脑立即休眠
/// </summary>
void Sleep();
/// <summary>
/// 在等待<param name="interval"></param>时间后, 立即休眠
/// </summary>
/// <param name="interval"></param>
void Sleep(TimeSpan interval);
/// <summary>
/// 立即重启
/// </summary>
void Restart();
/// <summary>
/// 在等待<param name="interval"></param>时间后, 立即重启
/// </summary>
/// <param name="interval"></param>
void Restart(TimeSpan interval);
}
}
namespace WinPowerHelper.Core.Services
{
using System;
using System.Diagnostics;
using WinPowerHelper.Core.Interfaces;
public class WinPowerManager: IPowerManager
{
private const string ShutdownCmd = "shutdown.exe";
private WinPowerManager() { }
private static readonly object _lock = new object();
private static WinPowerManager _instance;
public static WinPowerManager Instance
{
get
{
if (_instance == null)
{
lock (_lock)
{
if (_instance == null)
_instance = new WinPowerManager();
}
}
return _instance;
}
}
public void Shutdown()
{
Process.Start(ShutdownCmd, "-s");
}
public void Shutdown(TimeSpan interval)
{
Process.Start(ShutdownCmd, $"-s -t {interval.TotalSeconds}");
}
public void Sleep()
{
Process.Start(ShutdownCmd, "-h");
}
public void Sleep(TimeSpan interval)
{
Process.Start(ShutdownCmd, $"-h -t {interval.TotalSeconds}");
}
public void Restart()
{
Process.Start(ShutdownCmd, "-r");
}
public void Restart(TimeSpan interval)
{
Process.Start(ShutdownCmd, $"-r -t {interval.TotalSeconds}");
}
}
}
いくつかの問題
- データバインディングすると、使用した値コンバータ(IValueConverter)の場合、渡す必要
ConverterParameter
の文字列を渡す方法を時間を、?
以下の結合コードをXAML:
"{Binding ElementName=timer, Path=IsTiming, Converter={StaticResource BoolToStringConverter}, ConverterParameter='取消;开始'}"
次のようにC#コード値変換部です。
namespace WinPowerHelper.Wpf.Extensions
{
using System;
using System.Globalization;
using System.Windows.Data;
public class BoolToStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value.GetType() != typeof(bool)) return new InvalidCastException();
var splitText = (parameter as string).Split(';');
if (splitText == null || splitText.Length != 2)
return value; // 转换失败
return ((bool) value) ? splitText[0] : splitText[1];
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}