博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows Mobile使用.NET Compact Framework开发Winform时如何Dispose资源
阅读量:7085 次
发布时间:2019-06-28

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

背景

在开发3G应用的时候,程序退出了,需要自动关闭已经打开的链接。这样需要在Winform退出的时候把其分配的资源都dispose掉。本文讲述Winform Dispose资源的几种方法。

 

方案

方案一

使用VS2005以上做Winform开发,Visual Studio会自动生成一个用于保存layout信息和处理事件的partial class(一般叫做*.Designer.cs)这个partial class里面重载了Dispose的方法。

///  /// Clean up any resources being used. ///  /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) {
if (disposing && (components != null)) {
components.Dispose(); } base.Dispose(disposing); }

但是这个partial class是由Visual Studio自动生成的,最好不要手工修改,需要Dispose最简单的方法是把这个方法拷贝到另外一个类文件里面。一般为*.cs,然后加入需要Dispose的代码。

///  /// Clean up any resources being used. ///  /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) {
if (disposing && (components != null)) {
components.Dispose(); } DisposeResources(); base.Dispose(disposing); }

 

方案二

注册Disposed事件。

this.Disposed += new EventHandler(MainForm_Disposed);

 

void MainForm_Disposed(object sender, EventArgs e) {
Logger.Instance.LogTrace("MainForm_Disposed"); }

 

当Dispose调用下面代码的时候会调用该注册的事件处理函数。

if (disposing && (components != null)) {
components.Dispose(); }

 

可是这个方法有一个问题,如果该Form没有任何其他的components 时,MainForm_Disposed是不会被调用的,因此有下面方案三。

 

方案三

由于方案二的问题,提出了方案三。方案三是使用一个继承于Component的类Disposer,这个Disposer类保存需要Dispose的类的引用,然后把这个Disposer类加入到components中。

internal class Disposer : Component {
private IDisposable _disposable; internal Disposer(IDisposable disposable) {
_disposable = disposable; } protected override void Dispose(bool disposing) {
if (disposing) {
if (_disposable != null) {
_disposable.Dispose(); } } base.Dispose(disposing); } }

定义一个继承于Component的类Disposer。Disposer保存了需要Dispose的类的引用。

components.Add(new Disposer(connectionManager));

Disposer的对象保存到 components里面,这样components 就不可能为null。下面的代码就会执行。

if (disposing && (components != null)) {
components.Dispose(); }

connectionManager为需要Dispose的成员,这个对象的类需要继承IDisposable 并重载Dispose。

sealed class ConnectionManager : IDisposable {
public void Dispose() {
//Disconnect the network } }

 

方案三就完成了,大家merry chrismas。

    本文转自Jake Lin博客园博客,原文链接:http://www.cnblogs.com/procoder/archive/2009/12/24/Windows-Mobile-Winform-Dispose.html,如需转载请自行联系原作者

你可能感兴趣的文章
2014第12周二学习记
查看>>
c语言关键字总结
查看>>
mkdir failed for img Read-only file system
查看>>
Android中使用第三方jar包
查看>>
[转]Console命令详解,让调试js代码变得更简单
查看>>
堆是堆,栈归栈
查看>>
语法面试等题目汇总
查看>>
你写的Try...Catch真的有必要么?
查看>>
4安德鲁斯.2.2在系统,具有系统权限的应用程序无法读取或写入SD卡
查看>>
Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor...
查看>>
Android开发:使用ViewDragHelper实现抽屉拉伸效果
查看>>
CSS的position设置
查看>>
mysql实战优化之五: 更新/插入优化 sql优化
查看>>
Uber即将进驻扬州啦,车主火热招募中!
查看>>
缓存一致性协议
查看>>
JVM Input Arguments Lookup (JMX)(转)
查看>>
我持续推动Rust语言支持Windows XP系统
查看>>
Http状态码说明
查看>>
浏览器缓存相关http头
查看>>
Autofac.Integration.Owin
查看>>