2010-12-06 84 views
0

我正在嘗試使用另一個使用Unity3D引擎的程序.Net serialport方法。我們可以在dll裏面放回調函數嗎?

我有一個c#類庫(dll),當串口收到一些數據時,註冊並實現一個回調函數。

public CSerialDll() 
{   
    _serial.DataReceived += new SerialDataReceivedEventHandler(serial_DataReceived); 
} 

void serial_DataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
    int bytes = _serial.BytesToRead; 
    _comBuffer = new byte[bytes]; 
    _serial.Read(_comBuffer, 0, bytes); 
    Console.WriteLine("data recv: " + System.Text.ASCIIEncoding.ASCII.GetString(_comBuffer)); 
} 

然後在我的另一個程序中,我創建了一個類的實例。

我想知道我的回調serial_DataReceived內庫(dll)是否會被調用。我試圖從另一個程序中讀取庫中的_comBuffer,它總是空的(即使我在同一應用程序中使用控制檯應用程序進行測試時數據即將到來)。

任何幫助,非常感謝。

感謝

回答

0

<HUNCH>

如果我是一個類的設計者,我將數據放入回調,所以如果你看一下SerialDataReceivedEventArgs類,你會發現裏面是你緩衝數據。

所以,當你得到一個事件,然後你打電話給你閱讀,你實際上放棄了發送給你並請求更多的數據。

換句話說,是的,它是一個外部圖書館這一事實與它沒有按照它的工作原理沒有任何關係。

</HUNCH>

+0

這就是我編寫我自己的串口庫的方式,但從它的外觀來看,astk使用的是Microsoft的Serial.IO.Ports庫,它實際上在獲得事件後確實會強制讀取數據,不附於該事件。實際上,Microsoft的SerialPort類有很多事情做得很糟糕。 – 2010-12-08 04:10:41

0

通常會有什麼特別之處在一個單獨的DLL是,只要訪問修飾符設置是否正確的方法。

然而,根據你如何設置你的解決方案,它可能是一個痛苦,確保你有你的bin文件夾中的最新DLL。

+0

它應該工作。但問題是沒有。在我使用該DLL的客戶端中,我創建了該DLL的新實例。所以該DLL會註冊回調。正如你在上面的代碼中看到的,這個回調函數填充了_comBuffer,它有一個屬性可以從外部程序中讀取。然後在我的客戶端程序更新循環中,我嘗試讀取該屬性。此屬性始終爲空。但是當我將dll項目作爲控制檯應用程序項目並編寫了一個測試代碼的主要方法時,我可以從串行接收數據。有任何想法嗎?謝謝... – astk 2010-12-07 15:47:00

相關問題