GTK删除事件

本文关键字:事件 删除 GTK | 更新日期: 2023-09-27 18:19:13

我使用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#应用程序没有被关闭。

GTK删除事件

声明你的生产者线程为类的public成员。

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

则应该添加一个事件处理程序,如下所示:

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

最后,只需将其分配给事件

widget.DeleteEvent +=OnDeleteEvent;