【问题标题】:GTK delete eventGTK 删除事件
【发布时间】:2012-01-01 01:48:42
【问题描述】:

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

【问题讨论】:

  • 你能发布一个简单的二十行程序来重现这个问题吗?
  • 而不是Aborting 你的线程你应该设置`producer.IsBackground = true;'这样,当应用程序准备关闭时,它就不会挂起您的进程

标签: c# gtk gtk#


【解决方案1】:

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

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

}

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

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

最后,只需将其分配给您的活动

widget.DeleteEvent +=OnDeleteEvent;

【讨论】:

    猜你喜欢
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多