Hi,
Below is my testing event hadnlder code.
interface IEventTest
{
void Call();
event EventHandler OnEventHandler;
}
public class EventTest : IEventTest {
public EventTest()
{
}
public void Call()
{
if (eventHandler != null)
{
eventHandler(th is, new EventArgs());
}
}
event EventHandler eventHandler;
event EventHandler IEventTest.OnEv entHandler
{
add
{
if (eventHandler != null)
{
lock (eventHandler)
{
eventHandler += value;
}
}
else
{
eventHandler = new EventHandler(va lue);
}
}
remove
{
if (eventHandler != null)
{
lock (eventHandler)
{
eventHandler -= value;
}
}
}
}
}
This is my testing code.
private void button3_Click(o bject sender, EventArgs e)
{
IEventTest et = new EventTest();
et.OnEventHandl er += new EventHandler(et _OnEventHandler );
et.Call();
et.OnEventHandl er -= new EventHandler(et _OnEventHandler );
et.OnEventHandl er += new EventHandler(et _OnEventHandler );
et.Call();
et.OnEventHandl er -= new EventHandler(et _OnEventHandler );
}
void et_OnEventHandl er(object sender, EventArgs e)
{
MessageBox.Show ("Called");
}
I think messagebox should be displayed two times...not three times..
Why the messagebox is showing three times?
As U see the code, I removed the event handler before calling next Call
method.
Thanks,
Below is my testing event hadnlder code.
interface IEventTest
{
void Call();
event EventHandler OnEventHandler;
}
public class EventTest : IEventTest {
public EventTest()
{
}
public void Call()
{
if (eventHandler != null)
{
eventHandler(th is, new EventArgs());
}
}
event EventHandler eventHandler;
event EventHandler IEventTest.OnEv entHandler
{
add
{
if (eventHandler != null)
{
lock (eventHandler)
{
eventHandler += value;
}
}
else
{
eventHandler = new EventHandler(va lue);
}
}
remove
{
if (eventHandler != null)
{
lock (eventHandler)
{
eventHandler -= value;
}
}
}
}
}
This is my testing code.
private void button3_Click(o bject sender, EventArgs e)
{
IEventTest et = new EventTest();
et.OnEventHandl er += new EventHandler(et _OnEventHandler );
et.Call();
et.OnEventHandl er -= new EventHandler(et _OnEventHandler );
et.OnEventHandl er += new EventHandler(et _OnEventHandler );
et.Call();
et.OnEventHandl er -= new EventHandler(et _OnEventHandler );
}
void et_OnEventHandl er(object sender, EventArgs e)
{
MessageBox.Show ("Called");
}
I think messagebox should be displayed two times...not three times..
Why the messagebox is showing three times?
As U see the code, I removed the event handler before calling next Call
method.
Thanks,
Comment