// 是否處於暫停狀態
private bool isPause = false;
///
/// 播放按鈕:從暫停繼續 或 開啟新檔播放
///
private void btnPlay_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(m_strPlayFileName))
{
if (isPause)
{
// 從暫停恢復播放
HikPlayer.Hik_PlayM4_Pause(PORT, false);
isPause = false;
}
else
{
// 開啟新檔播放
OpenFile();
}
}
}
///
/// 暫停按鈕
///
private void btnPause_Click(object sender, EventArgs e)
{
HikPlayer.Hik_PlayM4_Pause(PORT, true);
isPause = true;
}
///
/// 停止按鈕:完整釋放資源
///
private void btnStop_Click(object sender, EventArgs e)
{
HikPlayer.Hik_PlayM4_Stop(PORT);
HikPlayer.Hik_PlayM4_CloseFile(PORT);
HikPlayer.Hik_PlayM4_RealeseDDraw(); // 釋放 DirectDraw 資源
// 重繪畫面區域清除殘影
pVideo.Invalidate(true);
}
| VC++ 邏輯 | C# 簡化處理 | 說明 |
|---|---|---|
m_bPlaying/m_bPause 雙旗標 | 單一 isPause | 狀態機簡化,實際專案建議完整狀態機 |
Hik_PlayM4_Pause(PORT, bPause) 第二參數 BOOL | Hik_PlayM4_Pause(PORT, true/false) | C# bool 直接對應 |
停止時處理轉檔資源 (outFile, yuvBuf) | 略過 | 非核心播放功能,專案若需轉檔再補充 |
KillTimer(PLAY_TIMER) 統計計時器 | 略過 | WinForms 可用 Timer 元件替代 |
Hik_PlayM4_Pause 參數細節true = 暫停,false = 恢復播放Stop(PORT) — 停止解碼播放執行緒CloseFile(PORT) — 關閉檔案控制碼、釋放檔案緩衝區RealeseDDraw() — 釋放 DirectDraw 繪圖表面與裝置Invalidate(true) — 觸發 UI 重繪清除殘留畫面順序不可顛倒,否則可能導致記憶體洩漏或下次開啟檔案失敗。