2012-01-01 59 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;