呼叫Nero SDK 燒錄光碟(含程式碼)
專案中有多光碟機刻錄的需求,但在一個程序裡同時啟動多個燒錄任務,程序經常報異常,於是把燒錄部分單獨做了個控制檯程式,每個光碟機燒錄就啟動一個程序去執行燒錄任務,這樣就算燒錄程序出錯也不會影響到父程序。
以下是Nero 刻碟的類,SDK採用NeroSDK-1.08版本,呼叫NeroCOM元件。呼叫時必須引用Interop.NEROLib.dll 和 Interop.NeroVisionAPI.dll 兩個dll。
- publicclass NeroBurn
- {
- #region 屬性
-
private NeroDrive m_neroDerive;
- private Nero m_nero;
- privatebool m_aborted;
- privatestring m_burnPath;
- privatebool m_isDoneBurn;
- privateint m_returnCode;//0:失敗;1:成功;-1:未知
- privatestring m_discvol;
- //nero 委託
-
private _INeroDriveEvents_OnDoneBurnEventHandler m_evOnDoneBurn;
- private _INeroDriveEvents_OnAddLogLineEventHandler m_evOnAddLogLine;
- private _INeroEvents_OnWaitCDEventHandler m_evOnWaitCD;
- private _INeroDriveEvents_OnAbortedEventHandler m_evOnAborted;
- private _INeroDriveEvents_OnProgressEventHandler m_evOnProgress;
-
private
- #endregion
- #region 建構函式
- /// <summary></summary>
- /// 建構函式
- ///
- /// <param name="driverletter">碟符
- /// <param name="burnpath">待刻錄的檔案路徑
- /// <param name="discvol">盤的卷標
- public NeroBurn(string driverletter,string burnpath,string discvol)
- {
- m_burnPath = burnpath;
- m_nero = new NeroClass();
- m_neroDerive = allocDevice(driverletter);
- m_aborted = false;
- m_isDoneBurn = false;
- m_discvol = discvol;
- }
- #endregion
- #region Nero事件處理
- /// <summary></summary>
- /// 發起刻錄事件
- ///
- /// <param name="bSubscribe">
- privatevoid SubscribeToEvents(bool bSubscribe)
- {
- if (bSubscribe)
- {
- m_evOnAddLogLine = new _INeroDriveEvents_OnAddLogLineEventHandler(m_drive_OnAddLogLine);
- m_neroDerive.OnAddLogLine += m_evOnAddLogLine;
- m_evOnWaitCD = new _INeroEvents_OnWaitCDEventHandler(m_nero_OnWaitCD);
- m_nero.OnWaitCD += m_evOnWaitCD;
- m_evOnDoneBurn = new _INeroDriveEvents_OnDoneBurnEventHandler(m_drive_OnDoneBurn);
- m_neroDerive.OnDoneBurn += m_evOnDoneBurn;
- m_evOnWaitCDDone = new _INeroEvents_OnWaitCDDoneEventHandler(m_nero_OnWaitCDDone);
- m_nero.OnWaitCDDone += m_evOnWaitCDDone;
- m_evOnProgress = new _INeroDriveEvents_OnProgressEventHandler(m_drive_OnProgress);
- m_neroDerive.OnProgress += m_evOnProgress;
- }
- else
- {
- m_neroDerive.OnAddLogLine -= m_evOnAddLogLine;
- m_nero.OnWaitCD -= m_evOnWaitCD;
- m_nero.OnWaitCDDone -= m_evOnWaitCDDone;
- m_neroDerive.OnDoneBurn -= m_evOnDoneBurn;
- m_neroDerive.OnProgress -= m_evOnProgress;
- }
- }
- privatevoid m_drive_OnProgress(refint ProgressInPercent, refbool Abort)
- {
- // This events gives us an opportunity to show progress
- // as well as abort if needed.
- //
- Abort = m_aborted;
- Console.WriteLine("光碟" + m_discvol + " " + ProgressInPercent.ToString() + "% had Burned!!");
- //c_TaskPercent.Text = ProgressInPercent.ToString() + "%";
- }
- privatevoid m_nero_OnWaitCDDone()
- {
- // When waiting on a disc is done, make sure to
- // enable us and hide the WaitCD form.
- //
- Console.WriteLine("a Disc has inserted!");
- }
- /// <summary></summary>
- ///燒錄完成,不管失敗成功!
- ///
- /// <param name="StatusCode">
- privatevoid m_drive_OnDoneBurn(ref NERO_BURN_ERROR StatusCode)
- {
- // When burning is over, make sure to unsubscribe from all
- // events.
- //
- SubscribeToEvents(false);
- if (StatusCode == NERO_BURN_ERROR.NERO_BURN_OK)
- {
- m_returnCode = 1;
- Console.WriteLine(m_neroDerive.DriveLetter + "盤卷標為 " + m_discvol + " 刻錄成功!!");
- }
- else
- {
- m_returnCode = 0;
- Console.WriteLine(m_neroDerive.DriveLetter + "盤卷標為 " + m_discvol + " 燒錄失敗!!");
- }
- m_isDoneBurn = true;
- Console.WriteLine("Burn Finish!!");
- }
- /// <summary></summary>
- /// 如果光碟機為空,等待光碟機
- ///
- /// <param name="WaitCD">
- /// <param name="WaitCDLocalizedText">
- privatevoid m_nero_OnWaitCD(ref NERO_WAITCD_TYPE WaitCD, refstring WaitCDLocalizedText)
- {
- Console.WriteLine("Wait CD...");
- }
-
相關推薦
呼叫Nero SDK 燒錄光碟(含程式碼)
專案中有多光碟機刻錄的需求,但在一個程序裡同時啟動多個燒錄任務,程序經常報異常,於是把燒錄部分單獨做了個控制檯程式,每個光碟機燒錄就啟動一個程序去執行燒錄任務,這樣就算燒錄程序出錯也不會影響到父程序。 以下是Nero 刻碟的類,SDK採用Ne
Java併發程式設計(2):執行緒中斷(含程式碼)
使用interrupt()中斷執行緒當一個執行緒執行時,另一個執行緒可以呼叫對應的Thread物件的interrupt()方法來中斷它,該方法只是在目標執行緒中設定一個標誌,表示它已經被中斷,並立即返回。這裡需要注意的是,如果只是單純的呼叫interrupt()方法,執行緒並沒有實際被中斷,會繼續往下執行。
Java併發程式設計(3):執行緒掛起、恢復與終止的正確方法(含程式碼)
JAVA大資料中高階架構 2018-11-06 14:24:56掛起和恢復執行緒Thread 的API中包含兩個被淘汰的方法,它們用於臨時掛起和重啟某個執行緒,這些方法已經被淘汰,因為它們是不安全的,不穩定的。如果在不合適的時候掛起執行緒(比如,鎖定共享資源時),此時便可能會發生死鎖條件——其他執行緒在等待該
Java併發程式設計(5):volatile變數修飾符-意料之外的問題(含程式碼)
volatile用處說明在JDK1.2之前,Java的記憶體模型實現總是從主存(即共享記憶體)讀取變數,是不需要進行特別的注意的。而隨著JVM的成熟和優化,現在在多執行緒環境下volatile關鍵字的使用變得非常重要。 在當前的Java記憶體模型下,執行緒可以把變數儲存在本地記憶體(比如機器的暫存器)中,而
Java併發程式設計(8):多執行緒環境中安全使用集合API(含程式碼)
Java併發程式設計(8):多執行緒環境中安全使用集合API(含程式碼)JAVA大資料中高階架構 2018-11-09 14:44:47在集合API中,最初設計的Vector和Hashtable是多執行緒安全的。例如:對於Vector來說,用來新增和刪除元素的方法是同步的。如果只有一個執行緒與Vector的例
Java併發程式設計(9):死鎖(含程式碼)
JAVA大資料中高階架構 2018-11-10 14:04:32當執行緒需要同時持有多個鎖時,有可能產生死鎖。考慮如下情形: 執行緒A當前持有互斥所鎖lock1,執行緒B當前持有互斥鎖lock2。接下來,當執行緒A仍然持有lock1時,它試圖獲取lock2,因為執行緒B正持有lock2,因此執行緒A會阻塞等
用TensorFlow基於神經網路實現井字棋(含程式碼)
為了展示如何應用神經網路演算法模型,我們將使用神經網路來學習優化井字棋(Tic Tac Toe)。明確井字棋是一種決策性遊戲,並且走棋步驟優化是確定的。 開始 為了訓練神經網路模型,我們有一系列優化的不同的走棋棋譜,棋譜基於棋盤位置列表和對應的最佳落子點。考慮到棋盤的對稱性,通
Android APP架構淺談(含程式碼)
寫在開頭 不多說,本文圍繞一張圖展開,請查閱,歡迎共同討論,叨擾了。如果你還有什麼需求或者什麼想法,可一起完善此demo一起進步哦!!! 讓我們從library到mouble,讓我們談談我理解的專案的Project架構。 lib-netwo
基於VC++的人臉美化的實現實踐篇(含程式碼)
作者:張皓霖 上海電力學院 課程老師:秦倫明 上篇我將人臉美化的過程列出來了,這篇我是用VS2012(VC++)+MFC+OpenCv 將這些功能實現。 實驗目的 利用VC++實現人臉美化軟體,要求: 1、具有人臉美化介面; 2、具有磨皮功能,引數可調; 3、具有
【Java併發程式設計】之二十:併發新特性—Lock鎖和條件變數(含程式碼)
簡單使用Lock鎖 Java 5中引入了新的鎖機制——java.util.concurrent.locks中的顯式的互斥鎖:Lock介面,它提供了比synchronized更加廣泛的鎖定操作。Lock介面有3個實現它的類:ReentrantLock、Reetrant
【Java併發程式設計】之二十二:併發新特性—障礙器CyclicBarrier(含程式碼)
CyclicBarrier(又叫障礙器)同樣是Java 5中加入的新特性,使用時需要匯入java.util.concurrent.CylicBarrier。它適用於這樣一種情況:你希望建立一組任
【Java併發程式設計】之六:Runnable和Thread實現多執行緒的區別(含程式碼)
Java中實現多執行緒有兩種方法:繼承Thread類、實現Runnable介面,在程式開發中只要是多執行緒,肯定永遠以實現Runnable介面為主,因為實現Runnable介面相比繼承Th
linux_ok6410 ttyUSB0 (GPS)USB轉串列埠匯流排除錯(含程式碼)
ttyUSB0除錯已經成功好久了,移植沒來的及總結實在抱歉。 編譯環境:LINUX -3.0.1、 ok6410、RedHat6.0 目的:除錯ttyUSB0_GPS除錯: 1、首先,需要在核心選項中
【Java TCP/IP Socket】基於NIO的TCP通訊(含程式碼)
NIO主要原理及使用 NIO採取通道(Channel)和緩衝區(Buffer)來傳輸和儲存資料,它是非阻塞式的I/O,即在等待連線、讀寫資料(這些都是在一執行緒以客戶端的程式中會阻塞執行緒的操作)的時候,程式也可以做其他事情,以實現執行緒的非同步操作。 考
[乾貨]一張地鐵圖看懂人工智慧演算法發展(含程式碼)---轉自AlphaTree
“ 或許你曾經困擾過:明明自家產品有自己的資料,明明演算法模型很多開源,可為什麼開發起來卻問題多多? 要麼拿到問題無從下手?”每一個大廚,心中都有自己的菜譜。要烹製一桌山珍海味,美味佳餚,自然要熟知三件事,原料(模型),調料(優化演算法)和祕籍菜譜(這裡常常只paper:pa
【Java併發程式設計】之二十三:併發新特性—訊號量Semaphore(含程式碼)
在作業系統中,訊號量是個很重要的概念,它在控制程序間的協作方面有著非常重要的作用,通過對訊號量的不同操作,可以分別實現程序間的互斥與同步。當然它也可以用於多執行緒的控制,我們完全可以通過
DLL的建立和使用(含程式碼)
初次接觸DLL檔案的使用,在網上找了許多教程自己學習,多謝網上的許多大神的帖子。現在將這些總結一下寫出來也是對自己的一個提高1.DLL建立方法1. 開啟VS2010,點選檔案->新建->專案2. 點選已安裝模版->Visual C
[Java併發程式設計實戰] 柵欄 CyclicBarrier 實現(含程式碼)
溫故而知新,可以為師矣。—《論語》 它的意思是:“溫習舊知識從而得知新的理解與體會,憑藉這一點就可以成為老師了 PS: 如果覺得本文有用的話,請幫忙點贊,留言評論支援一下哦,您的支援是我最大的動力!謝謝啦~ 柵欄(Barrier)類似於閉鎖,
javaNIO原理(含程式碼)及與 同步阻塞IO 、偽非同步IO比較
一.同步阻塞IO BIO就是阻塞式的IO,網路通訊中對於多客戶端的連入,伺服器端總是與客戶端數量一致的執行緒去處理每個客戶端任務,即,客戶端與執行緒數1:1,並且進行讀寫操作室阻塞的,當有你成千上完的客戶端進行連線,就導致伺服器不斷的建立新的執行緒,最後導
【Java併發程式設計】之十六:深入Java記憶體模型——happen-before規則及其對DCL的分析(含程式碼)
happen—before規則介紹 Java語言中有一個“先行發生”(happen—before)的規則,它是Java記憶體模型中定義的兩項操作之間的偏序關係,如果操作A先行發生於操作B,其意思就是說,在發生操作B之前,操作A產生的影響都能被操作B觀察到,“影響