Re: Problem with threads

Alexander Olk <[email protected]> Sat, 30 Apr 2005 16:46:19 +0200
Newsgroups gmane.comp.lib.wxwindows.wxnet
Message-ID <[email protected]>
Am Samstag, den 30.04.2005, 15:26 +0200 schrieb Radek Podgorny:
> Thanks but this wouldn't solve my problem. I don't want to touch c++.
> 
> As far as I understand it correctly, the problem is that all the child windows 
> (pointers to them) are stored in the c++ part of wxnet. When I call the 
> wx.Frame C# destructor, it calls the underlaying c++ destructor which takes 
> all the children and destroys them (in c++). So, when I overload the 
> wx.Button destructor (or Dispose or whatever) which is wx.Frame's child in C# 
> it's pretty useless because it's never called, right?
> 
> How do we solve this? If it's really like this the entire wx-net wrapper is 
> useless :-(

If you look at the c++ wrapper for wxButton you'll find
DECLARE_OBJECTDELETED(_Button) in class _Button.

What does DECLARE_OBJECTDELETED do ?

DECLARE_OBJECTDELETED is a macro that implements the following code:

#define DECLARE_OBJECTDELETED(name) \
    virtual ~name() \
    { \
        FunctionEvent e(wxEVT_OBJECTDELETED); \
        ProcessEvent(e); \
    }

If the button dtor gets called (c++) a "object deleted" event will be generated.
You can catch this event with 

// add the next line to your Button class ctor
AddEventListener(Event.wxEVT_OBJECTDELETED, new EventListener(OnObjectDeleted));

public void OnObjectDeleted(object sender, Event evt)
{
	// stop a thread, do someting else here, 
	// change the value of a thread_is_running variable,
	// turn on the coffee machine,
	// or whatever you want...
}

Hope that helps.

Regards
Alexander Olk







-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games.
Get your fingers limbered up and give it your best shot. 4 great events, 4
opportunities to win big! Highest score wins.NEC IT Guy Games. Play to
win an NEC 61 plasma display. Visit http://www.necitguy.com/?r=20