So how does .NET 2.0 CF deals with delegate targets ? Do they prevent
objects from being garbage collected ?

Of course I can use a conditional compile and use a simple delegate in
CF, but if delegate still keep a strong reference to their target,
then I would need to find a way around that.

Sébastien

On 8/3/06, Frans Bouma <[EMAIL PROTECTED]> wrote:
You could use a conditional compile, which makes the routine not usable on 
CF.NET but that's a given, as CF.NET can't deal with the
feature you need anyway.

A conditional compile then could make your code compilable on .NET 2.0 and 
CF.NET 2.0 as well.

Be sure that if you use the Serializable attribute and you write a dummy class 
to make the code compile on CF.NET 2.0, the CF.NET
2.0 SP1 contains also that attribute (for whatever reason, remoting isn't 
supported on cf.net) so it will give type clashes.

        FB

> Hello everyone,
>
> I am in the process of adapting our internal framework (for
> .NET 2.0) to the .NET 2.0 CF (target is Windows CE 5.0).
>
> So far, it is only a matter of removing stuff and using
> different overloads, but now I got this problem:
>
> We have a WeakMulticastDelegate class that we use in various places.
> This class is just like a delegate, but the target is a
> WeakReference instead. The problem I have is that there is no
> Target and Method properties on delegates in .NET 2.0 CF. How
> can I replace them in this code for example:
>
> public WeakMulticastDelegate(Delegate strongDelegate) {
>   if (strongDelegate == null)
>     throw new ArgumentNullException("strongDelegate");
>
>   Delegate[] delegates = strongDelegate.GetInvocationList();
>
>   if (delegates.Length > 0)
>   {
>     int start = 0;
>
>     for (int i = 0; i < delegates.Length; i++, start++)
>     {
>       if (delegates[i] != null)
>         break;
>     }
>
>     if (start == delegates.Length)
>       throw new ArgumentException("No valid delegate in
> invocation list.", "strongDelegate");
>
>     if (delegates[start].Target != null)
>       _weakTarget = new WeakReference(delegates[start].Target);
>
>     _method = delegates[start].Method;
>
>     WeakMulticastDelegate current = this;
>
>     for (int i = start + 1; i < delegates.Length; i++)
>     {
>       if (delegates[i] != null)
>       {
>         current._next = new WeakMulticastDelegate(delegates[i].Target,
> delegates[i].Method);
>         current = current._next;
>       }
>     }
>   }
> }
>
> Thanks !
>
> Sébastien
>
> --
> Sébastien Lorion
> Software Architect / Architecte organique [EMAIL PROTECTED]
>
> ===================================
> This list is hosted by DevelopMentor(r)  http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>
>

===================================
This list is hosted by DevelopMentor(r)  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com



--
Sébastien Lorion
Software Architect / Architecte organique
[EMAIL PROTECTED]

===================================
This list is hosted by DevelopMentor®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to