博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反射方法关闭窗体报错的解决方法
阅读量:5898 次
发布时间:2019-06-19

本文共 973 字,大约阅读时间需要 3 分钟。

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

 

转载于:https://www.cnblogs.com/wwwzzg168/p/3570699.html

你可能感兴趣的文章
Android介绍以及源码编译---Android源码下载
查看>>
SpringBoot集成redis缓存
查看>>
sql经典语句
查看>>
使用ffmpeg实现对h264视频解码 -- (实现了一个易于使用的c++封装库)
查看>>
第4周作业-面向对象设计与继承
查看>>
机器学习的原理
查看>>
flink watermark介绍
查看>>
[Flink原理介绍第四篇】:Flink的Checkpoint和Savepoint介绍
查看>>
mybatis学习之一 开发环境配置和接口编程
查看>>
Android Xutils 框架
查看>>
C#基础知识整理 基础知识(21) 委托(二)
查看>>
Android应用程序键盘(Keyboard)消息处理机制分析(16)
查看>>
Sysbench 0.5版安装配置
查看>>
统一沟通-技巧-11-Lync-联盟-无法-音频-远程桌面-传文件
查看>>
书摘—你不可不知的心理策略
查看>>
【博客话题】毕业——开始人生的艰苦历程
查看>>
2014.7.30-8.3日广大网友的提问解答(答问题的第2个工作周)
查看>>
Powershell管理系列(二十五)PowerShell操作之获取AD账号及邮箱信息
查看>>
Linux安装telnet
查看>>
【高德地图API】从零开始学高德JS API(三)覆盖物——标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物...
查看>>