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

播放声音后,我想处置SecondaryBuffer,但是,检查是否已完成播放的唯一方法是检查其状态。

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

这是包含我的包装类的代码段。

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重新检查Status。

最佳答案

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

10-08 19:27