zoukankan      html  css  js  c++  java
  • 反射方法关闭窗体报错的解决方法

    在发射一个函数时,如果这个函数包含了对当前窗体的 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);
                }
            }
  • 相关阅读:
    模拟——1031D
    线性dp——cf1032
    莫比乌斯反演——专题练习
    数论,质因数,gcd——cf1033D 好题!
    连通图,set——cf1037E
    线段树动态开点——cf1045G
    跳表上线性dp——1150D 好题!
    高斯消元求主元——模意义下的消元cf1155E
    汽车长期停放,毁车没商量?
    驾校都是错的?这才是日常驾驶正确的换挡方式
  • 原文地址:https://www.cnblogs.com/sofire/p/1765682.html
Copyright © 2011-2022 走看看