在发射一个函数时,如果这个函数包含了对当前窗体的 Form.Close(),那么很可能在 Application.Run 处报错。
引发这个原因,我在反汇编跟踪时,最终发现了问题点。原函数如下:
代码
private
void
navBarControl1_DoubleClick(
object
sender, EventArgs e)
{
if (navBarControl1.PressedLink != null )
{
string itemname = navBarControl1.PressedLink.ItemName;
this ._dynamicHelper.Methods.Invoke(itemname + " _DoubleClicked " , DynamicHelperBase.InstanceBindingFlags);
}
}
{
if (navBarControl1.PressedLink != null )
{
string itemname = navBarControl1.PressedLink.ItemName;
this ._dynamicHelper.Methods.Invoke(itemname + " _DoubleClicked " , DynamicHelperBase.InstanceBindingFlags);
}
}
这个函数是对一系列导航,根据其 ItemName 调用当前窗体的对应函数。
然而,在执行【退出】导航时,引发了错误。原因是因为执行 this._dynamicHelper.Methods.Invoke 后,将会返回到这个 navBarControl1_DoubleClick函数,但是当前窗体在之前已经被释放了,此时的函数,是一个无效的引用。改成以下,可以解决这个问题:
代码
private
void
navBarControl1_DoubleClick(
object
sender, EventArgs e)
{
if (navBarControl1.PressedLink != null )
{
string iname = navBarControl1.PressedLink.ItemName;
this .BeginInvoke( new Action < string > ((itemname) =>
{
this ._dynamicHelper.Methods.Invoke(itemname + " _DoubleClicked " , DynamicHelperBase.InstanceBindingFlags);
}), iname);
}
}
{
if (navBarControl1.PressedLink != null )
{
string iname = navBarControl1.PressedLink.ItemName;
this .BeginInvoke( new Action < string > ((itemname) =>
{
this ._dynamicHelper.Methods.Invoke(itemname + " _DoubleClicked " , DynamicHelperBase.InstanceBindingFlags);
}), iname);
}
}
转载于:https://www.cnblogs.com/sofire/archive/2010/06/26/1765682.html
扫描二维码关注公众号,回复:
6652796 查看本文章