473,405 Members | 2,160 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,405 software developers and data experts.

Serialization of SortedList objects when object contains event

I have a class derived from a SortedList called SystemList that contains a
list of objects indexed with a string value.

The definition of the objects contained in the SortedList have a boolean
field and an event that is fired if the boolean field value changes.

The derived SortedList class has an override for the Add method. The Add
method adds an event handler for the object's event for each new item added
to the list. In the program, the events work fine and all seems well.

However, when I serialize and then try to deserialize the derived
SortedList, deserialization fails. If I rem out the line that adds the event
handler in the Add method, everything serializes and deserializes jsut fine.
But with it in I can't deserialize.

Can someone suggest what is going wrong here and how I can correct it?

Thanks,

Dennis

BTW, the code for the deserialization is:

BinaryFormatter bf = new BinaryFormatter();

bf.AssemblyFormat = FormatterAssemblyStyle.Simple;

IFormatter formatter = bf;

Stream stream = new FileStream(name, FileMode.Open, FileAccess.Read,
FileShare.Read);

systemList = (SystemList)formatter.Deserialize(stream);

fileName = name; // update doc's file name

stream.Close();
Nov 15 '05 #1
8 3108
Dennis,

When you have an event, you must store a reference to the target of the
event. In other words, a reference to the object that holds the method to
be called when the event is fired is stored by the object firing the event.

Because of this, when you serialize the object that fires the events, it
tries to serialize the event handlers as well.

To get around this, you will have to disconnect the event handlers, or
you could flag the event with the NonSerialized attribute (I am not sure if
that works). Either way, you have to prevent the event handlers from being
serialized.

Hope this helps.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Dennis C. Drumm" <de*******@primacode.com> wrote in message
news:e4**************@TK2MSFTNGP12.phx.gbl...
I have a class derived from a SortedList called SystemList that contains a
list of objects indexed with a string value.

The definition of the objects contained in the SortedList have a boolean
field and an event that is fired if the boolean field value changes.

The derived SortedList class has an override for the Add method. The Add
method adds an event handler for the object's event for each new item added to the list. In the program, the events work fine and all seems well.

However, when I serialize and then try to deserialize the derived
SortedList, deserialization fails. If I rem out the line that adds the event handler in the Add method, everything serializes and deserializes jsut fine. But with it in I can't deserialize.

Can someone suggest what is going wrong here and how I can correct it?

Thanks,

Dennis

BTW, the code for the deserialization is:

BinaryFormatter bf = new BinaryFormatter();

bf.AssemblyFormat = FormatterAssemblyStyle.Simple;

IFormatter formatter = bf;

Stream stream = new FileStream(name, FileMode.Open, FileAccess.Read,
FileShare.Read);

systemList = (SystemList)formatter.Deserialize(stream);

fileName = name; // update doc's file name

stream.Close();

Nov 15 '05 #2
Nickolas:

I thought so, but trying the NonSerialize attribute does not work. That can
only be used on fields.

How do I remove/disconnect the event handlers? I would think -= but the
compiler doesn't like that.

Alternatively, is there a way to override the deserialization process and
add do something with the event handlers at that point?

Dennis

"Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.com> wrote in
message news:Or**************@tk2msftngp13.phx.gbl...
Dennis,

When you have an event, you must store a reference to the target of the event. In other words, a reference to the object that holds the method to
be called when the event is fired is stored by the object firing the event.
Because of this, when you serialize the object that fires the events, it tries to serialize the event handlers as well.

To get around this, you will have to disconnect the event handlers, or
you could flag the event with the NonSerialized attribute (I am not sure if that works). Either way, you have to prevent the event handlers from being serialized.

Hope this helps.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Dennis C. Drumm" <de*******@primacode.com> wrote in message
news:e4**************@TK2MSFTNGP12.phx.gbl...
I have a class derived from a SortedList called SystemList that contains a list of objects indexed with a string value.

The definition of the objects contained in the SortedList have a boolean field and an event that is fired if the boolean field value changes.

The derived SortedList class has an override for the Add method. The Add
method adds an event handler for the object's event for each new item

added
to the list. In the program, the events work fine and all seems well.

However, when I serialize and then try to deserialize the derived
SortedList, deserialization fails. If I rem out the line that adds the

event
handler in the Add method, everything serializes and deserializes jsut

fine.
But with it in I can't deserialize.

Can someone suggest what is going wrong here and how I can correct it?

Thanks,

Dennis

BTW, the code for the deserialization is:

BinaryFormatter bf = new BinaryFormatter();

bf.AssemblyFormat = FormatterAssemblyStyle.Simple;

IFormatter formatter = bf;

Stream stream = new FileStream(name, FileMode.Open, FileAccess.Read,
FileShare.Read);

systemList = (SystemList)formatter.Deserialize(stream);

fileName = name; // update doc's file name

stream.Close();


Nov 15 '05 #3
Dennis,

If that is the case, then declare your event like this:

// Declare the field that holds the delegate.
[NonSerializable]
private EventHandler mobjEventHandlers = null;

// Declare the event.
public event EventHandler MyEvent
{
add
{
// Just add the event.
mobjEventHandlers += value;
}
remove
{
// Just remove the event.
mobjEventHandlers -= value;
}
}

And that should work.

If you use custom serialization, then you can set which values are
persisted.

Hope this helps.

--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Dennis C. Drumm" <de*******@primacode.com> wrote in message
news:Ov**************@TK2MSFTNGP10.phx.gbl...
Nickolas:

I thought so, but trying the NonSerialize attribute does not work. That can only be used on fields.

How do I remove/disconnect the event handlers? I would think -= but the
compiler doesn't like that.

Alternatively, is there a way to override the deserialization process and
add do something with the event handlers at that point?

Dennis

"Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.com> wrote in message news:Or**************@tk2msftngp13.phx.gbl...
Dennis,

When you have an event, you must store a reference to the target of the
event. In other words, a reference to the object that holds the method to
be called when the event is fired is stored by the object firing the

event.

Because of this, when you serialize the object that fires the events, it
tries to serialize the event handlers as well.

To get around this, you will have to disconnect the event handlers,
or you could flag the event with the NonSerialized attribute (I am not sure

if
that works). Either way, you have to prevent the event handlers from

being
serialized.

Hope this helps.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Dennis C. Drumm" <de*******@primacode.com> wrote in message
news:e4**************@TK2MSFTNGP12.phx.gbl...
I have a class derived from a SortedList called SystemList that contains a list of objects indexed with a string value.

The definition of the objects contained in the SortedList have a boolean field and an event that is fired if the boolean field value changes.

The derived SortedList class has an override for the Add method. The

Add method adds an event handler for the object's event for each new item

added
to the list. In the program, the events work fine and all seems well.

However, when I serialize and then try to deserialize the derived
SortedList, deserialization fails. If I rem out the line that adds the

event
handler in the Add method, everything serializes and deserializes jsut

fine.
But with it in I can't deserialize.

Can someone suggest what is going wrong here and how I can correct it?

Thanks,

Dennis

BTW, the code for the deserialization is:

BinaryFormatter bf = new BinaryFormatter();

bf.AssemblyFormat = FormatterAssemblyStyle.Simple;

IFormatter formatter = bf;

Stream stream = new FileStream(name, FileMode.Open, FileAccess.Read,
FileShare.Read);

systemList = (SystemList)formatter.Deserialize(stream);

fileName = name; // update doc's file name

stream.Close();



Nov 15 '05 #4
Thanks Nicholas,

Your comments are much appreciated!

Dennis
"Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.com> wrote in
message news:uo**************@TK2MSFTNGP11.phx.gbl...
Dennis,

If that is the case, then declare your event like this:

// Declare the field that holds the delegate.
[NonSerializable]
private EventHandler mobjEventHandlers = null;

// Declare the event.
public event EventHandler MyEvent
{
add
{
// Just add the event.
mobjEventHandlers += value;
}
remove
{
// Just remove the event.
mobjEventHandlers -= value;
}
}

And that should work.

If you use custom serialization, then you can set which values are
persisted.

Hope this helps.

--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Dennis C. Drumm" <de*******@primacode.com> wrote in message
news:Ov**************@TK2MSFTNGP10.phx.gbl...
Nickolas:

I thought so, but trying the NonSerialize attribute does not work. That can
only be used on fields.

How do I remove/disconnect the event handlers? I would think -= but the
compiler doesn't like that.

Alternatively, is there a way to override the deserialization process and
add do something with the event handlers at that point?

Dennis

"Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.com> wrote

in
message news:Or**************@tk2msftngp13.phx.gbl...
Dennis,

When you have an event, you must store a reference to the target of
the
event. In other words, a reference to the object that holds the
method to be called when the event is fired is stored by the object firing the event.

Because of this, when you serialize the object that fires the events,
it
tries to serialize the event handlers as well.

To get around this, you will have to disconnect the event

handlers, or you could flag the event with the NonSerialized attribute (I am not
sure if
that works). Either way, you have to prevent the event handlers from

being
serialized.

Hope this helps.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Dennis C. Drumm" <de*******@primacode.com> wrote in message
news:e4**************@TK2MSFTNGP12.phx.gbl...
> I have a class derived from a SortedList called SystemList that

contains
a
> list of objects indexed with a string value.
>
> The definition of the objects contained in the SortedList have a

boolean
> field and an event that is fired if the boolean field value changes.
>
> The derived SortedList class has an override for the Add method. The

Add > method adds an event handler for the object's event for each new

item added
> to the list. In the program, the events work fine and all seems well. >
> However, when I serialize and then try to deserialize the derived
> SortedList, deserialization fails. If I rem out the line that adds the event
> handler in the Add method, everything serializes and deserializes jsut fine.
> But with it in I can't deserialize.
>
> Can someone suggest what is going wrong here and how I can correct it? >
> Thanks,
>
> Dennis
>
> BTW, the code for the deserialization is:
>
> BinaryFormatter bf = new BinaryFormatter();
>
> bf.AssemblyFormat = FormatterAssemblyStyle.Simple;
>
> IFormatter formatter = bf;
>
> Stream stream = new FileStream(name, FileMode.Open, FileAccess.Read,
> FileShare.Read);
>
> systemList = (SystemList)formatter.Deserialize(stream);
>
> fileName = name; // update doc's file name
>
> stream.Close();
>
>



Nov 15 '05 #5
Dennis,
Alternative to the event procedures as Nicholas showed, you can use the
field attribute modifier:

[field: NonSerialized]
public event EventHandler MyEvent;

Hope this helps
Jay

"Dennis C. Drumm" <de*******@primacode.com> wrote in message
news:Ov**************@TK2MSFTNGP10.phx.gbl...
Nickolas:

I thought so, but trying the NonSerialize attribute does not work. That can only be used on fields.

How do I remove/disconnect the event handlers? I would think -= but the
compiler doesn't like that.

Alternatively, is there a way to override the deserialization process and
add do something with the event handlers at that point?

Dennis

"Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.com> wrote in message news:Or**************@tk2msftngp13.phx.gbl...
Dennis,

When you have an event, you must store a reference to the target of the
event. In other words, a reference to the object that holds the method to
be called when the event is fired is stored by the object firing the

event.

Because of this, when you serialize the object that fires the events, it
tries to serialize the event handlers as well.

To get around this, you will have to disconnect the event handlers,
or you could flag the event with the NonSerialized attribute (I am not sure

if
that works). Either way, you have to prevent the event handlers from

being
serialized.

Hope this helps.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Dennis C. Drumm" <de*******@primacode.com> wrote in message
news:e4**************@TK2MSFTNGP12.phx.gbl...
I have a class derived from a SortedList called SystemList that contains a list of objects indexed with a string value.

The definition of the objects contained in the SortedList have a boolean field and an event that is fired if the boolean field value changes.

The derived SortedList class has an override for the Add method. The

Add method adds an event handler for the object's event for each new item

added
to the list. In the program, the events work fine and all seems well.

However, when I serialize and then try to deserialize the derived
SortedList, deserialization fails. If I rem out the line that adds the

event
handler in the Add method, everything serializes and deserializes jsut

fine.
But with it in I can't deserialize.

Can someone suggest what is going wrong here and how I can correct it?

Thanks,

Dennis

BTW, the code for the deserialization is:

BinaryFormatter bf = new BinaryFormatter();

bf.AssemblyFormat = FormatterAssemblyStyle.Simple;

IFormatter formatter = bf;

Stream stream = new FileStream(name, FileMode.Open, FileAccess.Read,
FileShare.Read);

systemList = (SystemList)formatter.Deserialize(stream);

fileName = name; // update doc's file name

stream.Close();



Nov 15 '05 #6

Hi Dennis,

Is your problem resolved?
If there is still any problem, please feel free to let me know.

Best regards,
Jeffrey Tan
Microsoft Online Partner Support
Get Secure! - www.microsoft.com/security
This posting is provided "as is" with no warranties and confers no rights.

--------------------
| Reply-To: "Dennis C. Drumm" <de*******@primacode.com>
| From: "Dennis C. Drumm" <de*******@primacode.com>
| References: <e4**************@TK2MSFTNGP12.phx.gbl>
<Or**************@tk2msftngp13.phx.gbl>
<Ov**************@TK2MSFTNGP10.phx.gbl>
<uo**************@TK2MSFTNGP11.phx.gbl>
| Subject: Re: Serialization of SortedList objects when object contains
event
| Date: Wed, 15 Oct 2003 14:17:42 -0400
| Lines: 157
| X-Priority: 3
| X-MSMail-Priority: Normal
| X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
| X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
| Message-ID: <eY*************@TK2MSFTNGP10.phx.gbl>
| Newsgroups: microsoft.public.dotnet.languages.csharp
| NNTP-Posting-Host: 206-15-137-36.dialup.ziplink.net 206.15.137.36
| Path: cpmsftngxa06.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTN GP10.phx.gbl
| Xref: cpmsftngxa06.phx.gbl microsoft.public.dotnet.languages.csharp:191603
| X-Tomcat-NG: microsoft.public.dotnet.languages.csharp
|
| Thanks Nicholas,
|
| Your comments are much appreciated!
|
| Dennis
|
|
| "Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.com> wrote
in
| message news:uo**************@TK2MSFTNGP11.phx.gbl...
| > Dennis,
| >
| > If that is the case, then declare your event like this:
| >
| > // Declare the field that holds the delegate.
| > [NonSerializable]
| > private EventHandler mobjEventHandlers = null;
| >
| > // Declare the event.
| > public event EventHandler MyEvent
| > {
| > add
| > {
| > // Just add the event.
| > mobjEventHandlers += value;
| > }
| > remove
| > {
| > // Just remove the event.
| > mobjEventHandlers -= value;
| > }
| > }
| >
| > And that should work.
| >
| > If you use custom serialization, then you can set which values are
| > persisted.
| >
| > Hope this helps.
| >
| > --
| > - Nicholas Paldino [.NET/C# MVP]
| > - mv*@spam.guard.caspershouse.com
| >
| > "Dennis C. Drumm" <de*******@primacode.com> wrote in message
| > news:Ov**************@TK2MSFTNGP10.phx.gbl...
| > > Nickolas:
| > >
| > > I thought so, but trying the NonSerialize attribute does not work.
That
| > can
| > > only be used on fields.
| > >
| > > How do I remove/disconnect the event handlers? I would think -= but
the
| > > compiler doesn't like that.
| > >
| > > Alternatively, is there a way to override the deserialization process
| and
| > > add do something with the event handlers at that point?
| > >
| > > Dennis
| > >
| > > "Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.com>
wrote
| > in
| > > message news:Or**************@tk2msftngp13.phx.gbl...
| > > > Dennis,
| > > >
| > > > When you have an event, you must store a reference to the target
| of
| > > the
| > > > event. In other words, a reference to the object that holds the
| method
| > to
| > > > be called when the event is fired is stored by the object firing the
| > > event.
| > > >
| > > > Because of this, when you serialize the object that fires the
| > events,
| > > it
| > > > tries to serialize the event handlers as well.
| > > >
| > > > To get around this, you will have to disconnect the event
| handlers,
| > or
| > > > you could flag the event with the NonSerialized attribute (I am not
| sure
| > > if
| > > > that works). Either way, you have to prevent the event handlers
from
| > > being
| > > > serialized.
| > > >
| > > > Hope this helps.
| > > >
| > > >
| > > > --
| > > > - Nicholas Paldino [.NET/C# MVP]
| > > > - mv*@spam.guard.caspershouse.com
| > > >
| > > > "Dennis C. Drumm" <de*******@primacode.com> wrote in message
| > > > news:e4**************@TK2MSFTNGP12.phx.gbl...
| > > > > I have a class derived from a SortedList called SystemList that
| > contains
| > > a
| > > > > list of objects indexed with a string value.
| > > > >
| > > > > The definition of the objects contained in the SortedList have a
| > > boolean
| > > > > field and an event that is fired if the boolean field value
changes.
| > > > >
| > > > > The derived SortedList class has an override for the Add method.
The
| > Add
| > > > > method adds an event handler for the object's event for each new
| item
| > > > added
| > > > > to the list. In the program, the events work fine and all seems
| well.
| > > > >
| > > > > However, when I serialize and then try to deserialize the derived
| > > > > SortedList, deserialization fails. If I rem out the line that adds
| the
| > > > event
| > > > > handler in the Add method, everything serializes and deserializes
| jsut
| > > > fine.
| > > > > But with it in I can't deserialize.
| > > > >
| > > > > Can someone suggest what is going wrong here and how I can correct
| it?
| > > > >
| > > > > Thanks,
| > > > >
| > > > > Dennis
| > > > >
| > > > > BTW, the code for the deserialization is:
| > > > >
| > > > > BinaryFormatter bf = new BinaryFormatter();
| > > > >
| > > > > bf.AssemblyFormat = FormatterAssemblyStyle.Simple;
| > > > >
| > > > > IFormatter formatter = bf;
| > > > >
| > > > > Stream stream = new FileStream(name, FileMode.Open,
FileAccess.Read,
| > > > > FileShare.Read);
| > > > >
| > > > > systemList = (SystemList)formatter.Deserialize(stream);
| > > > >
| > > > > fileName = name; // update doc's file name
| > > > >
| > > > > stream.Close();
| > > > >
| > > > >
| > > >
| > > >
| > >
| > >
| >
| >
|
|
|

Nov 15 '05 #7
Thank you all! The problem has been resolved.

For any MS people that might be monitoring this thread, the VS.NET and MSDN
Library could use a little more content on how to add and remove event
handlers (and probably event handlers in general). There certainly is some
useful information in them, probably enough for some, but not enough for
anyone just getting familiar with the concept.

Thanks again,

Dennis
"Jay B. Harlow [MVP - Outlook]" <Ja********@email.msn.com> wrote in message
news:en**************@TK2MSFTNGP11.phx.gbl...
Dennis,
Alternative to the event procedures as Nicholas showed, you can use the
field attribute modifier:

[field: NonSerialized]
public event EventHandler MyEvent;

Hope this helps
Jay

"Dennis C. Drumm" <de*******@primacode.com> wrote in message
news:Ov**************@TK2MSFTNGP10.phx.gbl...
Nickolas:

I thought so, but trying the NonSerialize attribute does not work. That can
only be used on fields.

How do I remove/disconnect the event handlers? I would think -= but the
compiler doesn't like that.

Alternatively, is there a way to override the deserialization process and
add do something with the event handlers at that point?

Dennis

"Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.com> wrote

in
message news:Or**************@tk2msftngp13.phx.gbl...
Dennis,

When you have an event, you must store a reference to the target of
the
event. In other words, a reference to the object that holds the
method to be called when the event is fired is stored by the object firing the event.

Because of this, when you serialize the object that fires the events,
it
tries to serialize the event handlers as well.

To get around this, you will have to disconnect the event

handlers, or you could flag the event with the NonSerialized attribute (I am not
sure if
that works). Either way, you have to prevent the event handlers from

being
serialized.

Hope this helps.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Dennis C. Drumm" <de*******@primacode.com> wrote in message
news:e4**************@TK2MSFTNGP12.phx.gbl...
> I have a class derived from a SortedList called SystemList that

contains
a
> list of objects indexed with a string value.
>
> The definition of the objects contained in the SortedList have a

boolean
> field and an event that is fired if the boolean field value changes.
>
> The derived SortedList class has an override for the Add method. The

Add > method adds an event handler for the object's event for each new

item added
> to the list. In the program, the events work fine and all seems well. >
> However, when I serialize and then try to deserialize the derived
> SortedList, deserialization fails. If I rem out the line that adds the event
> handler in the Add method, everything serializes and deserializes jsut fine.
> But with it in I can't deserialize.
>
> Can someone suggest what is going wrong here and how I can correct it? >
> Thanks,
>
> Dennis
>
> BTW, the code for the deserialization is:
>
> BinaryFormatter bf = new BinaryFormatter();
>
> bf.AssemblyFormat = FormatterAssemblyStyle.Simple;
>
> IFormatter formatter = bf;
>
> Stream stream = new FileStream(name, FileMode.Open, FileAccess.Read,
> FileShare.Read);
>
> systemList = (SystemList)formatter.Deserialize(stream);
>
> fileName = name; // update doc's file name
>
> stream.Close();
>
>



Nov 15 '05 #8

Hi Dennis,

Thanks for your feedback.
I am glad your problem has been resolved.
The customer's suggestion will greatly improve our product.

I think you can provide your suggestion to:
http://register.microsoft.com/mswish/suggestion.asp
or email to: ms****@microsoft.com

Again, thanks for your information.

Best regards,
Jeffrey Tan
Microsoft Online Partner Support
Get Secure! - www.microsoft.com/security
This posting is provided "as is" with no warranties and confers no rights.

--------------------
| Reply-To: "Dennis C. Drumm" <de*******@primacode.com>
| From: "Dennis C. Drumm" <de*******@primacode.com>
| References: <e4**************@TK2MSFTNGP12.phx.gbl>
<Or**************@tk2msftngp13.phx.gbl>
<Ov**************@TK2MSFTNGP10.phx.gbl>
<en**************@TK2MSFTNGP11.phx.gbl>
| Subject: Re: Serialization of SortedList objects when object contains
event
| Date: Thu, 16 Oct 2003 05:43:46 -0400
| Lines: 139
| X-Priority: 3
| X-MSMail-Priority: Normal
| X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
| X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
| Message-ID: <ev**************@TK2MSFTNGP11.phx.gbl>
| Newsgroups: microsoft.public.dotnet.languages.csharp
| NNTP-Posting-Host: 206-15-137-92.dialup.ziplink.net 206.15.137.92
| Path: cpmsftngxa06.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTN GP11.phx.gbl
| Xref: cpmsftngxa06.phx.gbl microsoft.public.dotnet.languages.csharp:191748
| X-Tomcat-NG: microsoft.public.dotnet.languages.csharp
|
| Thank you all! The problem has been resolved.
|
| For any MS people that might be monitoring this thread, the VS.NET and
MSDN
| Library could use a little more content on how to add and remove event
| handlers (and probably event handlers in general). There certainly is some
| useful information in them, probably enough for some, but not enough for
| anyone just getting familiar with the concept.
|
| Thanks again,
|
| Dennis
|
|
| "Jay B. Harlow [MVP - Outlook]" <Ja********@email.msn.com> wrote in
message
| news:en**************@TK2MSFTNGP11.phx.gbl...
| > Dennis,
| > Alternative to the event procedures as Nicholas showed, you can use the
| > field attribute modifier:
| >
| > [field: NonSerialized]
| > public event EventHandler MyEvent;
| >
| > Hope this helps
| > Jay
| >
| > "Dennis C. Drumm" <de*******@primacode.com> wrote in message
| > news:Ov**************@TK2MSFTNGP10.phx.gbl...
| > > Nickolas:
| > >
| > > I thought so, but trying the NonSerialize attribute does not work.
That
| > can
| > > only be used on fields.
| > >
| > > How do I remove/disconnect the event handlers? I would think -= but
the
| > > compiler doesn't like that.
| > >
| > > Alternatively, is there a way to override the deserialization process
| and
| > > add do something with the event handlers at that point?
| > >
| > > Dennis
| > >
| > > "Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.com>
wrote
| > in
| > > message news:Or**************@tk2msftngp13.phx.gbl...
| > > > Dennis,
| > > >
| > > > When you have an event, you must store a reference to the target
| of
| > > the
| > > > event. In other words, a reference to the object that holds the
| method
| > to
| > > > be called when the event is fired is stored by the object firing the
| > > event.
| > > >
| > > > Because of this, when you serialize the object that fires the
| > events,
| > > it
| > > > tries to serialize the event handlers as well.
| > > >
| > > > To get around this, you will have to disconnect the event
| handlers,
| > or
| > > > you could flag the event with the NonSerialized attribute (I am not
| sure
| > > if
| > > > that works). Either way, you have to prevent the event handlers
from
| > > being
| > > > serialized.
| > > >
| > > > Hope this helps.
| > > >
| > > >
| > > > --
| > > > - Nicholas Paldino [.NET/C# MVP]
| > > > - mv*@spam.guard.caspershouse.com
| > > >
| > > > "Dennis C. Drumm" <de*******@primacode.com> wrote in message
| > > > news:e4**************@TK2MSFTNGP12.phx.gbl...
| > > > > I have a class derived from a SortedList called SystemList that
| > contains
| > > a
| > > > > list of objects indexed with a string value.
| > > > >
| > > > > The definition of the objects contained in the SortedList have a
| > > boolean
| > > > > field and an event that is fired if the boolean field value
changes.
| > > > >
| > > > > The derived SortedList class has an override for the Add method.
The
| > Add
| > > > > method adds an event handler for the object's event for each new
| item
| > > > added
| > > > > to the list. In the program, the events work fine and all seems
| well.
| > > > >
| > > > > However, when I serialize and then try to deserialize the derived
| > > > > SortedList, deserialization fails. If I rem out the line that adds
| the
| > > > event
| > > > > handler in the Add method, everything serializes and deserializes
| jsut
| > > > fine.
| > > > > But with it in I can't deserialize.
| > > > >
| > > > > Can someone suggest what is going wrong here and how I can correct
| it?
| > > > >
| > > > > Thanks,
| > > > >
| > > > > Dennis
| > > > >
| > > > > BTW, the code for the deserialization is:
| > > > >
| > > > > BinaryFormatter bf = new BinaryFormatter();
| > > > >
| > > > > bf.AssemblyFormat = FormatterAssemblyStyle.Simple;
| > > > >
| > > > > IFormatter formatter = bf;
| > > > >
| > > > > Stream stream = new FileStream(name, FileMode.Open,
FileAccess.Read,
| > > > > FileShare.Read);
| > > > >
| > > > > systemList = (SystemList)formatter.Deserialize(stream);
| > > > >
| > > > > fileName = name; // update doc's file name
| > > > >
| > > > > stream.Close();
| > > > >
| > > > >
| > > >
| > > >
| > >
| > >
| >
| >
|
|
|

Nov 15 '05 #9

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
by: Casey | last post by:
So I'm using XmlSerializer to serialize out a wrapper object that contains an arbitrary number of other objects. The class definitions listed below are made to be very generic. Some of the...
5
by: francois | last post by:
First of all I would to to apologize for resending this post again but I feel like my last post as been spoiled Here I go for my problem: Hi, I have a webservice that I am using and I would...
1
by: Chris Bardon | last post by:
I'm working on a class library in .net, and am having a problem that I can only describe as a memory leak (which garbage collection was supposed to eliminate). My class library contains a single...
5
by: Rene | last post by:
I created a class (SomeClass), on that class, I declared a delegate (OnXyz) and then declared an event based on that delegate (Xyz). All this in the same class. After that, I created another class...
27
by: Codemonkey | last post by:
Heya All, Sorry, but I think it's about time for a monkey-ramble. I've just had enough of trying to serialize even simple objects with VB. A simple task you may think - stick the...
4
by: Michael Rich | last post by:
Can anyone point me to a collection class that has serialization/deserialization with it - preferably in XML. I know this can't be done with a collection that inherits from CollectionBase, but...
5
by: Henry Jones | last post by:
I read a bit on Serialization and came up with the following definition: The System.Runtime.Serialization namespace contains classes that can be used for serializing and deserializing objects....
0
by: crazyone | last post by:
I've got a gaming framework i'm building and i want to save myself the trouble of reading and writting the complete game data to a custom file and load/save it to an XML file but i'm getting...
11
by: William | last post by:
I'm looking for an example that would show how to serialize a c++ object at it's simplest w/o using any other api's. I have a class that I want to serialize and then pass to my obj-c class so I can...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.