2011-04-18 71 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