using System; using System.Collections; namespace ProcessInfo { public class ProcessListViewItemComparer : IComparer { // we need to support sort order in the IComparer because ListView only does ascending sort private bool ascending = true; private ProcessField compareField = ProcessField.Pid; public ProcessListViewItemComparer() { } public ProcessListViewItemComparer( ProcessField compareField, bool ascending ) { this.compareField = compareField; this.ascending = ascending; } public int Compare( ProcessListViewItem a, ProcessListViewItem b ) { if ( ( a == null ) || ( b == null ) ) { throw new ArgumentNullException(); } int comparison = new ProcessComparer( compareField ).Compare( a.Process, b.Process ); if ( !ascending ) { comparison *= -1; } return comparison; } int IComparer.Compare( Object a, Object b ) { return this.Compare( (ProcessListViewItem)a, (ProcessListViewItem)b ); } public bool Ascending { get { return ascending; } set { ascending = value; } } public ProcessField CompareField { get { return compareField; } set { compareField = value; } } } }