2012-01-01 66 views
0

我使用GTK#,当主窗口关闭时我需要中止一个线程。线程被附加到主要的内部小部件。我试图使用删除和销毁事件。我失败了。GTK删除事件

public class MyClass { 

     GLWidget widget= new AnyWidget(); 

     public GLWidget widget{ 
      get { return widget; } 
     } 
     private float red = 0.0f; 

     public MyClass() 
     { 
      Thread producer = new Thread (new ThreadStart (ThreadRun)); 
      producer.Start(); 
      widget.DeleteEvent += delegate { // I don't know what event I should use 
       producer.Abort(); 
      }; 
     } 

     public void ThreadRun() 
     { 
        while (true) { 
       //TODO 
        } 
     } 
    } 

问题是,当我按下关闭按钮时,我的GTK#应用程序未关闭。

+0

你可以发布一个简单的二行程序,再现问题? – sarnold 2012-01-01 01:54:25

+0

而不是'中止'你的线程你应该设置'producer.IsBackground = true;'这样当应用程序准备关闭它时不会挂起你的进程 – 2012-01-01 02:42:01

回答

0

将您的生产者线程声明为该类的公共成员。

public class MyClass { 
      public Thread producer = new Thread (new ThreadStart (ThreadRun)); 
//... 

} 

那么你应该补充一点,下面的事件处理程序:

protected void OnDeleteEvent (object sender, DeleteEventArgs a) 
{ 
    producer.Abort(); 
} 

最后,简单地将其分配给您的活动

widget.DeleteEvent +=OnDeleteEvent;