小编Sar*_*ton的帖子

EventHandlers和C#类析构函数/ Dispose

我对C#Classes和它们的解构函数有点困惑.

我必须在构造函数中获取的类实例中使用一些事件处理程序:

 public Foo(IFooHandler handler)
 {
     handler.Load += Load;
     handler.Close += Close;
 }
Run Code Online (Sandbox Code Playgroud)

当Foo类被销毁时,我需要取消订阅该事件.我IDisposable在那里或在解构器中实现和取消订阅吗?我需要消耗那些事件,我不能以另一种方式去做.

对于其中一个类,我创建一个实例,检查进度,然后类实例超出范围.对于另一个,它一直停留在MainForm表格关闭之前.第一个是我担心的,因为它可能仍然有对该事件处理程序的引用而没有正确地去.

我不想泄漏记忆.何时以及如何取消订阅?

c# events delegates winforms

24
推荐指数
2
解决办法
1万
查看次数

Interlocked用于增加/模仿布尔值,这样安全吗?

我只是想知道这个代码是否是一个开发人员(后来已经离开)是好的,我想他想避免锁定.这与仅仅使用直接锁之间有性能差异吗?

    private long m_LayoutSuspended = 0;
    public void SuspendLayout()
    {
        Interlocked.Exchange(ref m_LayoutSuspended, 1);
    }

    public void ResumeLayout()
    {
        Interlocked.Exchange(ref m_LayoutSuspended, 0);
    }

    public bool IsLayoutSuspended
    {
        get { return Interlocked.Read(ref m_LayoutSuspended) != 1; }
    }
Run Code Online (Sandbox Code Playgroud)

我认为锁定这样的东西会更容易吗?它确实会被多个线程使用,因此决定使用锁定/互锁的原因.

c# multithreading interlocked

11
推荐指数
2
解决办法
8251
查看次数

标签 统计

c# ×2

delegates ×1

events ×1

interlocked ×1

multithreading ×1

winforms ×1