【问题标题】:How can I add events to a wrapped class in C#?如何将事件添加到 C# 中的包装类?
【发布时间】:2011-08-08 05:16:08
【问题描述】:

我正在使用DirectSound 框架和SecondaryBuffer 对象。我将SecondaryBuffer 对象包装在另一个类中,因为我有一些其他值要与我的SecondaryBuffer 关联。

播放完声音后,我想处理掉SecondaryBuffer,但是,查看它是否播放完成的唯一方法是检查它的状态。

我想创建一个event,当我的SecondaryBuffer 的状态为正确值时可以调用它。

这是包含我的包装类的 sn-p。

public class WrappedBuffer
{
    public SecondaryBuffer Buffer { get; set; }
    //other variables here

    public WrappedBuffer(SecondaryBuffer buffer, ... and more)
    {
        this.Buffer = buffer;            
    }
}

没有事件,我必须使用Timer 并像这样检查状态;

if (!Buffer.Status.Playing)
{
     Buffer.Dispose();
}

无论如何我可以使用events 调用SecondaryBuffer 对象的Dispose() 方法,而无需使用Timer 重新检查状态。

【问题讨论】:

    标签: c# events delegates event-handling directsound


    【解决方案1】:

    这里没有魔法;如果该类型尚未公开事件,那么您将不得不轮询直到状态发生变化。无论如何,这就是实现了多少事件。在某些时候,如果更改没有通过您的一种方法发生,您只需要注意更改(在这种情况下,您只需在设置/更改值时触发事件)。

    【讨论】:

    • 如果没有魔法,检查这些变化的最佳方法是什么?计时器是持续轮询的最佳方式吗?
    • @Arnaud :它们是其他方法。我可以创建另一个线程并使用 while(true) { Thread.Sleep(1) //check value } 循环。
    • 你可以,但计时器会为你管理所有这些东西。使用计时器优化治疗。我的政治:“少写,多做”
    • 是的,这不是凯尔指出的唯一方法,但这是我会采用的方法,因为它可以让事情变得简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多