Hiba a program befejezésekor

Sziasztok!

A következő kis "HelloWorld" típusú programot írtam a MonoDevelop-ban.

using System;
using Gtk;
public class GtkHelloWorld {
public static void Main() {
Application.Init();
//Create the Window
Window myWin = new Window("My first GTK# Application!");
myWin.Resize(350,200);
//Create a label and put some text in it.
Label myLabel = new Label();
myLabel.Text = "Hello World!";
//Add the label to the form
myWin.Add(myLabel);
//Show Everything
myWin.ShowAll();
Application.Run();
} // end of Main()
} // end of Class GtkHelloWorld

Olyan példa, amit könyvből néztem ki. Szóval működik is, csak egy gond van. Ha a terminálból indítom az exe állományt, akkor a program nem adja vissza a vezérlést a terminálnak a program befejezésekor. Az ablak bezáródik, de olyan mintha még mindig futna a progi, mert a terminálban nem jön vissza a prompt. Muszáj nyomnom egy (Ctrl-C)-t is, hogy visszakerüljön a vezérlés a terminálra.

Van valakinek elképzelése, hogy mi lehet a gond? Egy ilyen egyszerű programnál nem kéne még ilyen problémának jelentkeznie.

Van rá valami megoldás? Vagy ez egy bug?

OS

Elfelejtettem megírni: UBUNTU 8.04 operációs rendszerem van.
(És biztos nem amiatt van baj, mert pl. C++ GUI programok rendesen működnek.)

Megoldás a problémára

A problémát az okozza, hogy nincs lekezelve az ablakhoz tartozó DeleteEvent, ami akkor történik, amikor a felhasználó bezárja az ablakot (megnyomja a Bezárás gombot a jobb felső sarokban).
A megoldás:

1, Kiegészíteni a kódot egy esemény-eseménykezelő összerendeléssel:

myWin.DeleteEvent += new DeleteEventHandler(OnDeleteEvent);

2, Írni egy eseménykezelőt az alábbi módon:

protected static void OnDeleteEvent (object sender, DeleteEventArgs a) {
Application.Quit ();
a.RetVal = true;
}

Ezáltal az ablak bezárásakor a program kilép a GTK főciklusából, és visszajön a prompt is.

Egyébként a korrekt megoldás az, ha minden ablaknak létrehozunk a kódban egy külön osztályt:

public partial class MyWindow : Gtk.Window

párbeszédablaknál:

public partial class MyWindow : Gtk.Dialog

Itt jegyezném meg, hogy grafikus felület készítéséhez nyugodtan lehet haszálni a MonoDevelop beépített tervezőjét (Stetic). Nagyon könnyű használni, és sokkal gyorsabban lehet vele GUI-t készíteni, mint ha kézzel írná meg az ember a kódot!

Működik

Szia kissg!

Kösz a segítséget! Így már minden rendben van. Tehát nincs semmiféle bug a rendszerben e tekintetben.