2011-04-18 67 views
3

我正在使用DirectSound框架和SecondaryBuffer对象。我正在将SecondaryBuffer对象包装到另一个课程中,因为我有一些其他值要与我的SecondaryBuffer相关联。如何将事件添加到C#中的包装类?

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

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

这是包含我的包装类的片段。

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状态。

回答

4

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

+0

如果没有魔法,检查这些更改的最佳方法是什么?定时器是不断调查的最佳方式吗? – 2011-04-18 21:36:10

+1

肯定是的,计时器是最好的方式。你不能这样做,所以... – 2011-04-18 21:43:50

+0

@Arnaud:他们是其他方式来做到这一点。我可以创建另一个线程并使用一段时间(true){Thread.Sleep(1)//检查值}循环。 – 2011-04-18 21:46:59