当前位置:编程学习 > C#/ASP.NET >>

反射方法关闭窗体报错的解决方法

在发射一个函数时,如果这个函数包含了对当前窗体的 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);
            }
        } 

 

这个函数是对一系列导航,根据其 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);
            }
        }

 

    
补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,