using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Windows.Forms; namespace Trigger { /// /// This is a that displays all available information from the and the /// public partial class StatusView : Form { #region Properties private Main Main; #endregion #region Constructors /// /// public StatusView(Main Main) { InitializeComponent(); this.Main = Main; this.Refresh(); } #endregion #region Methods /// /// Refreshes all elements in the /// public override void Refresh() { this.treeView.Nodes.Clear(); this.treeView.Nodes.Add(this.Main.EventMgr.GetStatus(this.treeView)); this.treeView.Nodes.Add(this.Main.TaskMgr.GetStatus(this.treeView)); TreeNode tnStatus = this.treeView.Nodes.Add("System Status"); List statusPlugins = this.getAvailableStatus(); foreach (Type statusPlugin in statusPlugins) { MethodInfo getStatus = statusPlugin.GetMethod("GetStatus"); if (getStatus != null) tnStatus.Nodes.Add((TreeNode)getStatus.Invoke(null, null)); } TreeNode tnProcess = this.treeView.Nodes.Add("Process data"); Process process = Process.GetCurrentProcess(); tnProcess.Nodes.Add("Nonpaged Memory usage: " + (process.NonpagedSystemMemorySize64 / 1024).ToString() + "kB"); tnProcess.Nodes.Add("Paged Memory usage: " + (process.PagedSystemMemorySize64 / 1024).ToString() + "kB"); tnProcess.Nodes.Add("Virtual Memory usage: " + (process.VirtualMemorySize64 / 1024 / 1024).ToString() + "MB"); tnProcess.Nodes.Add("Working Memory usage: " + (process.WorkingSet64 / 1024 / 1024).ToString() + "MB"); tnProcess.Nodes.Add("Total Processor time: " + process.TotalProcessorTime.TotalSeconds.ToString() + "s"); tnProcess.Nodes.Add("User Processor time: " + process.UserProcessorTime.TotalSeconds.ToString() + "s"); base.Refresh(); } /// /// Gets a list of all available Status using Reflection /// /// private List getAvailableStatus() { List types = new List(System.Reflection.Assembly.GetExecutingAssembly().GetTypes()); types = types.FindAll(new Predicate(item => { return item.IsClass && item.Namespace.StartsWith("Trigger.Status"); })); return types; } #endregion #region Events private void treeView_KeyDown(object sender, KeyEventArgs e) { switch (e.KeyCode) { case Keys.F5: this.Refresh(); break; case Keys.Escape: this.Close(); break; case Keys.C: System.Windows.Forms.Clipboard.SetText(treeView.SelectedNode.Text); break; } } #endregion } }