I found this sample program in a page called [[http://primates.ximian.com/~duncan/Mono/][Sample gtk# applications]]. The program is already compiled (possibly with a now-obsolete version of the Microsoft C# compiler), but this is a non-Mono executable that should decompile readily. Source code:
//
// ImageViewer.cs: A Image Viewer written in C#
//
// Author: Duncan Mak  (duncan@ximian.com)
//
// Copyright (C) 2002, Ximian. Inc.
//

using Gtk;
using Gdk;
using GtkSharp;
using Gdk.Imaging;
using System;

public class ImageViewer {

	 static Gtk.Window window = null;
	 static Gtk.FileSelection selections = null;
	 static Gtk.Image image = null;
	 static Gtk.Dialog about = null;

	 public static void Main (string [] args)
	 {
		  if (args.Length <= 0) {
				Console.WriteLine ("\nUSAGE: ImageViewer.exe \n");
				return;
		  }

		  string filename = args [0];
		  Application.Init ();
		  window = new Gtk.Window ("Image Viewer");
		  window.SetDefaultSize (200, 200);

		  window.DeleteEvent += new EventHandler (Window_Delete);

		  Gtk.ScrolledWindow scrolled_window = new Gtk.ScrolledWindow (
new Adjustment (IntPtr.Zero), new Adjustment (IntPtr.Zero));

		  Gtk.VBox vbox = new VBox (false, 2);
		  Gtk.VBox menubox = new VBox (false, 0);

		  // Pack menubar
		  MenuBar mb = new MenuBar ();

		  Menu file_menu = new Menu ();
		  MenuItem exit_item = new ImageMenuItem (
"gtk-close", new Gtk.AccelGroup (IntPtr.Zero));
		  MenuItem open_item = new ImageMenuItem (
"gtk-open", new Gtk.AccelGroup (IntPtr.Zero));
		  exit_item.Activated += new EventHandler (Window_Delete);
		  open_item.Activated += new EventHandler (Window_Open);

		  file_menu.Append (open_item);
		  file_menu.Append (new Gtk.SeparatorMenuItem ());
		  file_menu.Append (exit_item);
		  MenuItem file_item = new MenuItem ("_File");
		  file_item.Submenu = file_menu;

		  mb.Append (file_item);
		  menubox.PackStart (mb, false, false, 0);

		  // Pack toolbar
		  Gtk.Toolbar toolbar = new Gtk.Toolbar ();
		  toolbar.InsertStock ("gtk-open", "Open", String.Empty,
new Gtk.SignalFunc (Window_Open), IntPtr.Zero, 0);
		  toolbar.InsertStock ("gtk-close", "Close", String.Empty,
new Gtk.SignalFunc (Window_Delete), IntPtr.Zero, 1);
		  menubox.PackStart (toolbar, false, false, 0);
		  vbox.PackStart (menubox, false, false, 0);

		  Pixbuf pix = GetPixbufFromFile (filename);
		  image = new Image (pix);

		  Refresh (filename, pix);

		  scrolled_window.AddWithViewport (image);
		  vbox.PackStart (scrolled_window, true, true, 0);

		  scrolled_window.SetPolicy (PolicyType.Automatic,
PolicyType.Automatic);
		  window.Add (vbox);
		  window.ShowAll ();

		  Application.Run ();
	 }

	 static void Refresh (string new_filename, Gdk.Pixbuf p)
	 {
		  window.Resize (p.Width + 25, p.Height + 75);
		  window.Title = String.Format ("Image Viewer: {0}",
new_filename);
	 }

	 static Gdk.Pixbuf GetPixbufFromFile (string filename)
	 {
		  try {
				Pixbuf p = new Pixbuf (filename);
				return p;

		  } catch (GLib.GException e) {
				Console.WriteLine (e.GetType ());
				Console.WriteLine ("Cannot Open file.");
				Environment.Exit (1);
				return null;
		  }

	 }

	 static void Window_Delete (object o, EventArgs args)
	 {
		  SignalArgs s = (SignalArgs) args;
		  Application.Quit ();
		  s.RetVal = true;
	 }

	 static void Window_Open (object o, EventArgs args)
	 {
		  Window_Open ();
	 }

	 static void Window_Delete ()
	 {
		  Application.Quit ();
	 }

	 static void Window_Open ()
	 {
		  selections = new Gtk.FileSelection ("Open... ");
		  selections.Modal = true;
		  selections.OkButton.Clicked += new EventHandler (OK_Clicked);
		  selections.CancelButton.Clicked +=
new EventHandler (Cancel_Clicked);
		  selections.ShowAll ();
	 }

	 static void OK_Clicked (object o, EventArgs args)
	 {
		  Pixbuf p = GetPixbufFromFile (selections.Filename);
		  image.Pixbuf = p;

		  Refresh (selections.Filename, p);

		  selections.Hide ();
	 }

	 static void Cancel_Clicked (object o , EventArgs args)
	 {
		  selections.Hide ();
	 }
}
CategoryDecompilation