Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events GTK窗口删除事件未触发_Events_Mono_Gtk - Fatal编程技术网

Events GTK窗口删除事件未触发

Events GTK窗口删除事件未触发,events,mono,gtk,Events,Mono,Gtk,我有一个定制的GTK窗口。我试图通过使用MonoDevelop或手动将事件处理程序添加到DeleteEvent事件中来钩住DeleteEvent 但是,当我单击窗口右上角的X按钮“关闭”按钮(如果愿意)时,事件不会触发 为什么??这对我来说毫无意义。原来我是在事件触发之前处理窗口实例的 如果我必须用一个词来描述GTK,它将是模棱两可的 就我个人而言,我希望在假定对已处置对象触发事件时引发异常。同样地,我希望窗户在处理时被隐藏或毁坏。这两种情况都不是 吸取的教训。请记住,GTK是GTK+的.NET

我有一个定制的GTK窗口。我试图通过使用MonoDevelop或手动将事件处理程序添加到DeleteEvent事件中来钩住DeleteEvent

但是,当我单击窗口右上角的X按钮“关闭”按钮(如果愿意)时,事件不会触发


为什么??这对我来说毫无意义。

原来我是在事件触发之前处理窗口实例的

如果我必须用一个词来描述GTK,它将是模棱两可的

就我个人而言,我希望在假定对已处置对象触发事件时引发异常。同样地,我希望窗户在处理时被隐藏或毁坏。这两种情况都不是


吸取的教训。

请记住,GTK是GTK+的.NET包装器,GTK+使用计数引用保存其对象。因此,当您处理托管对象时,引用计数将被删除,信号将被断开!,但在该引用达到0之前,窗口本身不会被破坏。它不会达到0,因为它是在屏幕中实现的,并且窗口管理器持有一个引用。它就像一个文件:文件系统中的一个文件不会仅仅通过处理System.IO.file对象而消失;您必须调用Delete。同样,窗口将一直存在,直到您调用destroy。当然,但正如您所说,它是GTK+的.NET包装器。我希望包装中包含.NET标准错误处理。否则,我也可以自己编写包装器。当调用dispose时,为什么窗口不会破坏自身?在什么情况下,您希望窗口在释放时可见?@ChristopherHarris,Dispose与Destroy不同。这就像有一个文件句柄,这里有一个窗口句柄。当从用户代码调用时,Dispose用于释放托管和非托管资源。这是微软建议的IDisposable实现模式。我只是说GTK应该实现标准的MicrosoftIDisoPosable实现模式,并在调用dispose时同时处理托管和非托管资源,包括包含引用的窗口句柄。这是微软的标准最佳实践吗?@rodrigo,我知道GTK windows是如何工作的。我建议他们不应该这样做。根据C/C++编码标准,GTK+可以以它喜欢的任何方式工作。作为一个.NET库,GTK应该遵守微软的最佳实践,除非它有很好的理由不这样做。