Asp.Net教程,WinForm教程,Asp.Net MVC,vs2008教程,vs2010教程,Silverlight技术,源码下载,Asp.Net视频教程
全站热门标签
vs2010 Silverlight 存储过程 水晶报表 LINQ ADO.NET JavaScript DataGridView GridView AjaxPro DevExpress 面向对象 Extjs XML HTML教程 Oracle jQuery WPF MVC 分页 Office2010 GDI+ Visual C++2010 Dojo MySQL VB.NET WCF4.0 ASPxGridView WinForm textbox Sql2005 cookie Discuz!NT checkbox WCF SQL经典语句 T-SQL F# asp.net VS2008 SQL Ajax DropDownList VS2008新特性 TreeView Access Flex 页面执行时间 字符串 DataSet VB2005 回调 动画 C#时间 游戏 ASP.NET MVC
当前位置: 主页 > vs2010教程 >

基于Visual C#2010 与WPF开发Windows 7电源管理(2)

时间:2010-08-06 19:13来源:blog.csdn.net/yincheng01 作者:admin 点击:

  
        void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)  
        {  
            SetLabelButtonStatus(IndexerCurrentFileLabel, "检索进行中 ....");  
 
            IKnownFolder docs;  
 
            if (ShellLibrary.IsPlatformSupported)  
                docs = KnownFolders.DocumentsLibrary;  
            else 
                docs = KnownFolders.Documents;  
 
            ShellContainer docsContainer = docs as ShellContainer;  
 
            foreach (ShellObject so in docs)  
            {  
                RecurseDisplay(so);  
 
                if (backgroundWorker.CancellationPending)  
                {  
                    SetLabelButtonStatus(StartStopIndexerButton, "开始检索");  
                    SetLabelButtonStatus(IndexerStatusLabel, "点击开始寻找按钮继续开始寻找.");  
                    SetLabelButtonStatus(IndexerCurrentFileLabel, (cancelReason == "电源改变") ?  
                                "因为电源放弃检索" :  
                                "因为使用者放弃检索");  
 
                    return;  
                }  
 
                Thread.Sleep(1000); // 休眠1秒,以指示该文件的索引  
            }  
        }  
 
        private void Window_Loaded(object sender, RoutedEventArgs e)  
        {  
            CapturePowerManagementEvents();  
            GetPowerSettings();  
        }  
 //获取从PowerManager的当前属性值。  
        //此方法是在启动时调用。  
        private void GetPowerSettings()  
        {  
            settings.PowerPersonality = PowerManager.PowerPersonality.ToString();  
            settings.PowerSource = PowerManager.PowerSource.ToString();  
            settings.BatteryPresent = PowerManager.IsBatteryPresent;  
            settings.UpsPresent = PowerManager.IsUpsPresent;  
            settings.MonitorOn = PowerManager.IsMonitorOn;  
            settings.MonitorRequired = PowerManager.MonitorRequired;  
 
            if (PowerManager.IsBatteryPresent)  
            {  
                settings.BatteryShortTerm = PowerManager.IsBatteryShortTerm;  
                settings.BatteryLifePercent = PowerManager.BatteryLifePercent;  
                  
                BatteryState batteryState = PowerManager.GetCurrentBatteryState();  
 
                string batteryStateStr = string.Format(  
                "ACOnline: {1}{0}最大充电: {2} mWh{0}兆瓦时电流充电: {3} mWh{0}兆瓦时放电率: {4} {0}估计剩余时间: {5}{0}建议临界电池更换: {6} mWh{0}建议兆瓦电池充电警告: {7} mWh{0}",  
                Environment.NewLine,   
                batteryState.ACOnline,   
                batteryState.MaxCharge,   
                batteryState.CurrentCharge,   
                batteryState.ACOnline == true ? "N/A" : batteryState.DischargeRate.ToString() + " mWh",   
                batteryState.ACOnline == true ? "N/A" : batteryState.EstimatedTimeRemaining.ToString(),   
                batteryState.SuggestedCriticalBatteryCharge,   
                batteryState.SuggestedBatteryWarningCharge  
                );  
 
                settings.BatteryState = batteryStateStr;  
            }  
        }  
 
        // 增加了对PowerManager的事件的事件处理程序。  
        private void CapturePowerManagementEvents()  
        {  
            PowerManager.IsMonitorOnChanged += new EventHandler(MonitorOnChanged);  
            PowerManager.PowerPersonalityChanged += new EventHandler(  
                PowerPersonalityChanged);  
            PowerManager.PowerSourceChanged += new EventHandler(PowerSourceChanged);  
            if (PowerManager.IsBatteryPresent)  
            {  
                PowerManager.BatteryLifePercentChanged += new EventHandler(BatteryLifePercentChanged);  
 
         
                SetLabelButtonStatus(batteryLifePercentLabel, string.Format("{0}%", PowerManager.BatteryLifePercent.ToString()));  
            }  
 
            PowerManager.SystemBusyChanged += new EventHandler(SystemBusyChanged);  
        }  
 
        // PowerManager的事件处理程序。  
 
        void MonitorOnChanged(object sender, EventArgs e)  
        {  
            settings.MonitorOn = PowerManager.IsMonitorOn;  
            AddEventMessage(string.Format("显示器状态改变 (new status: {0})", PowerManager.IsMonitorOn ? "On" : "Off"));  
        }  
 
        void PowerPersonalityChanged(object sender, EventArgs e)  
        {  
            settings.PowerPersonality = PowerManager.PowerPersonality.ToString();  
            AddEventMessage(string.Format("电源变化(current setting: {0})", PowerManager.PowerPersonality.ToString()));  
        }  
 
        void PowerSourceChanged(object sender, EventArgs e)  
        {  
            settings.PowerSource = PowerManager.PowerSource.ToString();  
            AddEventMessage(string.Format("电源设置变化 (current source: {0})", PowerManager.PowerSource.ToString()));  
 
            //  
            if (backgroundWorker.IsBusy)  
            {  
                if (PowerManager.PowerSource == PowerSource.Battery)  
                {  
                  
                    cancelReason = "电源变化";  
                    backgroundWorker.CancelAsync();  
                }  
                 
            }  
            else 
            {  
                if (PowerManager.PowerSource == PowerSource.AC || PowerManager.PowerSource == PowerSource.Ups)  
                {  
                    SetLabelButtonStatus(IndexerStatusLabel, "点击开始寻找按钮继续开始寻找.");  
                }  
            }  
        }  
 
        void BatteryLifePercentChanged(object sender, EventArgs e)  
        {  
            settings.BatteryLifePercent = PowerManager.BatteryLifePercent;  
            AddEventMessage(string.Format("电源电量变化了 (new value: {0})", PowerManager.BatteryLifePercent));  
 
            // 设置剩余电源电量  
            SetLabelButtonStatus(batteryLifePercentLabel, string.Format("{0}%", PowerManager.BatteryLifePercent.ToString()));  
        }  
 
       //事件处理程序必须使用窗口的调度  
        //更新用户界面直接。这是必要的,因为  
        //事件处理程序被调用在非UI线程。  
        void SystemBusyChanged(object sender, EventArgs e)  
        {  
            AddEventMessage(string.Format("系统忙碌变化 at {0}", DateTime.Now.ToLongTimeString()));  
        }  
 
        void AddEventMessage(string message)  
        {  
            this.Dispatcher.Invoke(DispatcherPriority.Normal,  
                (Window1.MethodInvoker)delegate 
                {  
                    ListBoxItem lbi = new ListBoxItem();  
                    lbi.Content = message;  
                    messagesListBox.Items.Add(lbi);  
                    messagesListBox.ScrollIntoView(lbi);  
                });  
        }  
 
        private void StartIndexer(object sender, RoutedEventArgs e)  
        {  
            if (backgroundWorker.IsBusy && ((Button)sender).Content.ToString() == "停止索引")  
            {  
                cancelReason = "userCancelled";  
                backgroundWorker.CancelAsync();  
                SetLabelButtonStatus(IndexerStatusLabel, "点击按钮开始寻找");  
                return;  
            }  
 
            //如果运行在使用电池,不启动索引  
            if (PowerManager.PowerSource != PowerSource.Battery)  
            {  
                backgroundWorker.RunWorkerAsync();  
                SetLabelButtonStatus(IndexerStatusLabel, "索引进行中....");  
                SetLabelButtonStatus(StartStopIndexerButton, "停止 索引");  
            }  
            else 
            {  
                SetLabelButtonStatus(IndexerCurrentFileLabel, "电池上运行。没有启动的索引");  
            }  
        }  
 
        private void RecurseDisplay(ShellObject so)  
        {  
            if (backgroundWorker.CancellationPending)  
                return;  
 
            SetLabelButtonStatus(IndexerCurrentFileLabel,  
                string.Format("Current {0}: {1}", so is ShellContainer ? "文件夹" : "文件", so.ParsingName));  
 
            // 通过此对象的子项,如果它是一个对象容器  
            ShellContainer container = so as ShellContainer;  
 
            if (container != null)  
            {  
                foreach (ShellObject child in container)  
                    RecurseDisplay(child);  
            }  
        }  
 
        private void SetLabelButtonStatus(ContentControl control, string status)  
        {  
            this.Dispatcher.Invoke(DispatcherPriority.Normal,  
                (Window1.MethodInvoker)delegate 
                {  
                    control.Content = status;  
                });  
        }  
    }  

编译运行,见效果:
 

 

 

 
Tags:WPF vs2010 Windows7
责任编辑:admin
返回顶部
------分隔线----------------------------
推荐内容
骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价 骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价