gtk-sharp 0.0.0.0 Gtk# is thread aware, but not thread safe; See the Gtk# Thread Programming for details. Delegate function to specify the shape of comparison functions for tree iterators. Functions with this call syntax are usually used for comparison between two tree iterators as part of a sort. using System; using Gtk; public class SortableTreeView : TreeView { TreeStore ts; TreeIter iter; TreeViewColumn col0; TreeViewColumn col1; public SortableTreeView () { Type[] col_types = {typeof(string), typeof(string)}; ts = new TreeStore (col_types); ts.SetSortFunc (0, col0_compare, IntPtr.Zero, null); // use col0_compare to sort iter = new TreeIter (); AddRow ("1,1", "1,2"); AddRow ("2,1", "2,2"); this.Model = ts; this.HeadersClickable = true; this.HeadersVisible = true; col0 = new TreeViewColumn (); col0.Clickable = true; col0.Title = "Column 1"; CellRendererText col0_renderer = new CellRendererText (); col0.PackStart (col0_renderer, true); col0.AddAttribute (col0_renderer, "text", 0); col0.Clicked += new EventHandler (col0_clicked); this.AppendColumn (col0); col1 = new TreeViewColumn (); col1.Title = "Column 2"; CellRendererText col1_renderer = new CellRendererText (); col1.PackStart (col1_renderer, true); col1.AddAttribute (col1_renderer, "text", 1); this.AppendColumn (col1); } public void AddRow (string val1, string val2) { ts.Append (out iter); ts.SetValue (iter, 0, val1); ts.SetValue (iter, 1, val2); } public int col0_compare (TreeModel model, TreeIter tia, TreeIter tib) { return String.Compare ((string) model.GetValue (tia, 0), (string) model.GetValue (tib, 0)); } private void col0_clicked (object o, EventArgs args) { col0.SortOrder = SetSortOrder (col0); // set order asc or desc col0.SortIndicator = true; // turn on sort indicator ts.SetSortColumnId (0, col0.SortOrder); } public SortType SetSortOrder (TreeViewColumn col) { if (col.SortIndicator) { if (col.SortOrder == SortType.Ascending) return SortType.Descending; else return SortType.Ascending; } else return SortType.Ascending; } public static void Main () { Application.Init (); Window win = new Window ("TreeIterCompareFunc Example"); win.DeleteEvent += new DeleteEventHandler (delete_event); win.SetDefaultSize (400, 250); ScrolledWindow sw = new ScrolledWindow (); win.Add (sw); SortableTreeView stv = new SortableTreeView (); sw.Add (stv); win.ShowAll (); Application.Run (); } private static void delete_event (object o, DeleteEventArgs args) { Application.Quit (); } } System.Delegate System.ICloneable System.Runtime.Serialization.ISerializable System.Int32