C# “试图访问已释放的资源”
WinCE项目 VS2008
项目现有一个公共静态类PublicItems,一个窗体模板FormModel,三个继承自模板的子窗体。
现在想要实现在其中一个子窗体中对所有子窗体上一个Label显示进行修改。
实现方法:单独写一个委托类如下,在PublicItems中将其实例化为静态类dc。
public class DelegateClass
{ public delegate void RunModeSwitch(string mode);
public event RunModeSwitch runModeSwitch; private string runMode;
/// <summary>
/// 运行模式(属性)
/// </summary>
public string RunMode
{
get
{
return runMode;
}
set
{
if (value != runMode)
{
runMode = value;
if (runModeSwitch != null)
{
runModeSwitch(value);
}
}
}
}
}
当子窗体1中修改了静态实例dc的RunMode属性,就会触发runModeSwitch事件的执行,这样只要在模板窗体中注册该事件,其余子窗体就会收到刷新请求。
但是调试时发现一个问题,当我打开一个子窗体并关闭后,再回到子窗体1中修改RunMode属性时,就会出现“试图访问已释放的资源”的错误。
纠结一番后明白,因为dc是一个静态的实例,每当我新打开一个子窗体时就会注册一次事件,虽然窗体关闭,可是注册的事件并未注销;
因此在子窗体1中触发了runModeSwitch事件时,RunModeSwitch委托就会去执行所有已经注册时事件,这样,如果事件代码里涉及到窗体界面控件Label的Text的修改,就会报错。所以解决方法就是在模板窗体的关闭事件里加上对该事件的注销。
private void FormModel_Load(object sender, EventArgs e)
{
PublicItems.dc.runModeSwitch += new DelegateClass.RunModeSwitch(dc_runModeSwitch);
}
private void FormModel_Closed(object sender, EventArgs e)
{
PublicItems.dc.runModeSwitch -= new DelegateClass.RunModeSwitch(dc_runModeSwitch);
}
C# “试图访问已释放的资源”的更多相关文章
- C# Socket连接 无法访问已释放的对象
在进行Socket长连接时,若服务器或客户端出现异常时,另外一端对Socket对话进行操作时,程序会出现无法访问已释放的对象的问题.例如客户端出现问题主动断开Socket时,当服务器操作Socket时 ...
- (转)C#在父窗口中调用子窗口的过程(无法访问已释放的对象)
C#在父窗口中调用子窗口的过程: 1. 创建子窗口对象 2. 显示子窗口对象 笔者的程序中,主窗体MainFrm通过菜单调用子窗口ChildFrm.在窗体中定义了子窗口对象,然后在菜单项点击事件中 ...
- C# WinForm:无法访问已释放的对象
C#在父窗口中调用子窗口的过程: 1. 创建子窗口对象 2. 显示子窗口对象 笔者的程序中,主窗体MainFrm通过菜单调用子窗口ChildFrm.在窗体中定义了子窗口对象,然后在菜单项点击事件中 ...
- C# WinForm:无法访问已释放的对象
C#在父窗口中调用子窗口的过程: 1. 创建子窗口对象 2. 显示子窗口对象 笔者的程序中,主窗体MainFrm通过菜单调用子窗口ChildFrm.在窗体中定义了子窗口对象,然后在菜单项点击事件中 ...
- C#在父窗口中调用子窗口的过程(无法访问已释放的对象)异常,不存在从对象类型System.Windows.Forms.DateTimePicker到已知的托管提供程序本机类型的映射。
一:C#在父窗口中调用子窗口的过程(无法访问已释放的对象)异常 其实,这个问题与C#的垃圾回收有关.垃圾回收器管 理所有的托管对象,所有需要托管数据的.NET语言(包括 C#)都受运行库的 垃圾回收器 ...
- Tooltip导致的无法访问已释放对象
最近C#项目中遇到了一个无法访问已释放对象问题,经过反复测试,最终发现问题出在控件Tootip上,因为tootip内部有一个定时器,如果在窗口销毁时,鼠标移动到控件上恰好产生了一个tooltip,就会 ...
- c# winFrom Close报错 System.ObjectDisposedException:“无法访问已释放的对象。
System.ObjectDisposedException:“无法访问已释放的对象. ObjectDisposed_ObjectName_Name” 查了一下发现是 InitializeCompon ...
- WdatePicker 没有权限 不能执行已释放 Script 的代码
提示 拒绝访问 或 没有权限 或 ' Window.document 或 '$dp' 为空或不是对象 $dp.dd is undefined 之类的错误 SCRIPT70: 没有权限 WdatePic ...
- 密码太多记不住?SSO帮你轻松访问VDI及外部资源
单点登录(SSO)有多种方式,简单来讲,SSO是一个允许用户使用单一登录访问多个资源的认证过程.使用云应用的VDI用户可能需要某种方式的认证访问桌面外部的应用.SSO只需要用户单次输入认证信息就可以访 ...
随机推荐
- crawlspider爬虫:定义url规则
spider爬虫,适合meta传参的爬虫(列表页,详情页都有数据要爬取的时候) crawlspider爬虫,适合不用meta传参的爬虫 scrapy genspider -t crawl it it. ...
- (4.15)存储DAS,NAS,SAN在数据库存储上的应用
关键词:存储,硬盘接口类型,磁盘类型,网络类型,DAS,DNS,SAN 转自:http://blog.51cto.com/qianzhang/1254617 一. 硬盘接口类型 1. 并行接口还是串行 ...
- /proc/meminfo
/proc/meminfo 可以查看自己服务器 物理内存 注意这个文件显示的单位是kB而不是KB,1kB=1000B,但是实际上应该是KB,1KB=1024B 这个显示是不精确的,是一个已知的没有被 ...
- mysql 操作sql语句 操作数据库
sql语句 #1. 操作文件夹 创建数据库:create database db1 charset utf8; 查数据库:show databases; mysql> create databa ...
- 自定义Metrics:让Prometheus监控你的应用程序
前言 Prometheus社区提供了大量的官方以及第三方Exporters,可以满足Prometheus的采纳者快速实现对关键业务,以及基础设施的监控需求. 如上所示,一个简单的应用以及环境架构.一般 ...
- CUDA显卡运算编程菜鸟入门指南1——Hello world - yfszzx的专栏 - 博客频道 - CSDN.NET
第一次知道有显卡(GPU)编程这个东西,是去年比特币最热门的时候,看了几篇关于比特币的文章,说比特币挖矿要靠显卡,CPU的速度与GPU根本就没法比,于是就非常好奇,显卡是什么神奇的东西?为什么运算速度 ...
- css 文本超出容器长度后自动省略的方法!
我们在给用户显示文本内容的时候,往往需要避免文本内容超出容器宽度,防止换行溢出,小弟在网上找了下发现网上的实现仅仅只是实现了用 ...省略了的功能! 而并没有获取光标提示的功能,所有小弟就结合网上的代 ...
- Javascript-涨工资案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 最近整理出了有关大数据,微服务,分布式,Java,Python,Web前端,产品运营,交互等1.7G的学习资料,有视频教程,源码,课件,工具,面试题等等。这里将珍藏多年的资源免费分享给各位小伙伴们
大数据,微服务,分布式,Java,Python,Web前端,产品运营,交互 领取方式在篇尾!!! 基础篇.互联网架构,高级程序员必备视频,Linux系统.JVM.大型分布式电商项目实战视频...... ...
- Linux基础命令---more
more 将内容较长的文本文件内容分屏显示,支持定位关键字.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法 ...