Tag: dispose

以与创建相反的顺序处理对象?

我在我编写的代码中面临一个反复出现的问题:修改一些全局值(我将使用注册表值作为示例),然后尝试将修改恢复为原始状态。 我以为我会尝试使用IDisposable来解决这个问题。 创建时,对象将读取注册表值,将其存储在本地,然后进行修改。 当被破坏时,它将恢复设置。 它将使用这样的东西: using(RegistryModification mod = new RegistryModification(“HKCR\SomeValue”, 42)) { // reg value now modified to 42, do stuff } // Object gets disposed, which contains code to revert back the setting 如果只进行一次修改,应该工作得很好。 但是如果进行了多次修改,或者调用者没有使用’using’结构创建对象,我会发现出现问题。 public void Foo() { // assume HKCR\SomeValue starts as ’13’ // First object reads HKCR\SomeValue and stores ’13’, then […]

处理静电刷

我正在写一个生物节律应用程序。 为了测试它,我有一个带有Button和PictureBox的表单。 当我点击按钮时,我做了 myPictureBox.Image = GetBiorhythm2(); 哪个第一次运行正常, 但在第二次单击时会导致以下exception: System.ArgumentException: Parameter is not valid. at System.Drawing.Graphics.CheckErrorStatus at System.Drawing.Graphics.FillEllipse at Larifari.Biorhythm.Biorhythm.GetBiorhythm2 in c:\delo\Horoskop\Biorhythm.cs:line 157 at Larifari.test.Button1Click in c:\delo\Horoskop\test.Designer.cs:line 169 at System.Windows.Forms.Control.OnClick at System.Windows.Forms.Button.OnClick at System.Windows.Forms.Button.OnMouseUp at System.Windows.Forms.Control.WmMouseUp at System.Windows.Forms.Control.WndProc at System.Windows.Forms.ButtonBase.WndProc at System.Windows.Forms.Button.WndProc at ControlNativeWindow.OnMessage at ControlNativeWindow.WndProc at System.Windows.Forms.NativeWindow.DebuggableCallback at ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop at ThreadContext.RunMessageLoopInner at ThreadContext.RunMessageLoop at System.Windows.Forms.Application.Run […]

c#object.Dispose()或object = null

嗨,我有一个对象是Disposable,我想知道什么是更好的: this.object.Dispose(); 要么 this.object = null; 要么 this.object.Dispose(); this.object = null;

Win32.DestroyIcon与Icon.Dispose

我有这行代码: System.Drawing.Icon icon = System.Drawing.Icon.FromHandle(shinfo.hIcon); 几行之后,在使用图标之后,我有一行: Win32.DestroyIcon(shinfo.hIcon); 但是,当对我的代码运行静态分析时,它表示Resource_Leak可能来自图标。 我想知道如果我调用dispose方法会有什么不同: icon.Dispose(); 而不是现在正在使用的Win32.DestroyIcon()。 它们之间有什么区别吗? 我只是维护这段代码所以我不确定原始开发人员是否有任何使用Win32.DestroyIcon的特殊内容。

如何在.Net 1.1中的FileStream上实现IDisposable

这可能看起来像一个问题,但我正在看这个,因为我听到有人声称你必须在FileStream上调用Close(),即使它在一个使用块中(并且他们有代码调用Close())就在街区尽头)。 我知道Close()意味着调用Dispose(),但我认为我看起来更深,因为这是.Net 1.1代码,我的大部分经验都是2.0。 让我印象深刻的是,FileStream的MSDN文档为.Net 2.0启用了Dispose()和Dispose(bool),但只为.Net 1.1启用了Dispose(bool)。 我认为这可能是一个疏忽,所以我使用Reflector来查看一个程序集 – 我也看到Dispose(bool),但没有Dispose()。 它是否正确? 如果是这样,这里的故事是什么? FileStream在一个使用块中工作 – 我认为它必须实现IDisposable,据我所知,它只声明Dispose()。 是否有一些编译器魔法正在进行,或者我错过了隐藏的Dispose()实现(可能是调用Dispose(true)或Dispose(false)?) 最后(没有双关语),你能否确认在使用块中使用FileStream的范围将在.Net 1.1中的范围出口处关闭流? [编辑] 只是为了澄清,这是C#代码。 我知道VB.Net在.Net 2.0之前没有得到using语句,但我的理解是C#在1.1中有它(我的1.1代码在这里有它并编译)

如何在类的Dispose方法中取消订阅匿名函数?

我有一个A类…在它的构造函数中…我正在为Object_B的eventHandler分配一个匿名函数。 如何从A类的Dispose方法中删除(取消订阅)? 任何帮助,将不胜感激 ! 谢谢 Public Class A { public A() { B_Object.DataLoaded += (sender, e) => { Line 1 Line 2 Line 3 Line 4 }; } Public override void Dispose() { // How do I unsubscribe the above subscribed anonymous function ? } }

使用垃圾收集?

我想知道在调用Dispose()方法时执行了什么操作。 Object在Dispose()调用或Dispose()上快速释放所有资源,标记Object已准备好进行垃圾回收。 当我们将Object引用设置为NULL时发生了什么。 实际上我在.NET 2.0中有Windows表单应用程序。 并且我希望在经过一定时间后调用垃圾收集器(例如5分钟后)以收集所有未引用的对象。

为什么我们需要对某些对象使用Dispose()方法? 垃圾收集器为什么不这样做?

问题是:为什么我们需要在某些对象上调用Dispose() ? 为什么垃圾收集器在超出范围时收集它? 我试图理解为什么它被实现的原因。 我的意思是,当垃圾收集器从范围对象中收集时调用Dispose()会不会更容易。

使用dispose / finalize模式释放套接字/事件/ ummaged代码的正确技术

当我的类包含套接字和事件时,如何实现Dispose模式? 应该是这样的吗? class MyClass { Socket m_ListenerSocket = new Socket(); book m_Disposed=false; public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool isDisposing) { if (!m_Disposed) { if (isDisposing) { if (m_ListenerSocket != null) { m_ListenerSocket.Dispose(); innerClass.Notify -= Notify; } } //finalized unmanged code here m_Disposed = true; } } ~MyClass() { Dispose(false); } } […]

我是否需要从Request.CreateResponse()处理HttpResponseException?

我在ApiController的请求处理方法中有这个代码: if (uri != null) { HttpResponseMessage r = Request.CreateResponse(HttpStatusCode.Redirect); r.Headers.Location = uri; throw new HttpResponseException(r); } 潜在的问题是“r”从未处理过(至少在我的代码中)。 我可以将它包装在一个使用中,但是在响应流式传输到客户端之前不会“r”处理掉? 处理这个问题的正确方法是什么?