Hi
I'm trying to smuggle a form event handler to another form using the
context, and I'm getting a cast error when I try to retrieve the delegate
from the data slot.
DelegateDef.cs
==============
namespace X
{
public delegate void DaEventHandler(object sender, EventArgs e);
}
Form1.cs
========
using System.Runtime.Remoting.Contexts;
namespace X
{
public class frm1 : Form
{
:
:
public void frm1EventHandler(object sender, EventArgs args)
{
}
:
private void btnStart_Click(object sender, System.EventArgs e)
{
LocalDataStoreSlot dss =
Context.AllocateNamedDataSlot("slotName");
Context.SetData(dss, new
DaEventHandler(this.frm1EventHandler));
:
//cast works here, but nowhere else!
DaEventHandler eh = (DaEventHandler)(Context.GetData(dss));
}
}
}
Form2.cs
========
using System.Runtime.Remoting.Contexts;
namespace X
{
public class frm2 : Form
{
:
:
public event DaEventHandler DaEvent;
:
public frm2()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
LocalDataStoreSlot dss = Context.GetNamedDataSlot("slotName");
// => raises an invalid cast exception
DaEvent += (DaEventHandler)(Context.GetData(dss));
}
}
}
Also, frm2's ctor is being invoked on the same thread as the thread on which
frm1 lives - so there don't appear to be remoting/marshalling issues?
I also get the same exception if I just use a helper class (which tries to
retrieve the delegate from the context) directly invoked from frm1.
I realise I could use COM+ loosely coupled events to resolve this, but I'm
curious as to the underlying cause and the implications for smuggling out of
bandwidth references via the Context.
thanks
===================================
This list is hosted by DevelopMentor� http://www.develop.com
Some .NET courses you may be interested in:
NEW! Guerrilla ASP.NET, 17 May 2004, in Los Angeles
http://www.develop.com/courses/gaspdotnetls
View archives and manage your subscription(s) at http://discuss.develop.com