[英]C# Which is faster: SerialPort.Write(byte[], int, int) or SerialPort.BaseStream.WriteByte()?
[英]c# event handler after Serialport Write single byte
我想知道是否有可能在單獨的線程/進程中使用某種事件處理程序,當使用comport.Write(...)發送單個字節時會觸發該事件。
請考慮以下部分代碼:
public SerialPort comport = new SerialPort("COM1", 38400, Parity.Even, 8, StopBits.One);
comport.Write(buf, 0, buf.Length);
現在讓我們說buf.Lenght是1000。我的程序停止,直到我發送了所有1000字節。 我不想分割comport.Write,我只想使用一次。
現在是否有可能每次發送一個字節時都可以打開某種事件處理程序,例如更新進程欄等,而不會中斷發送太多數據(不會減慢它的速度)。
任何幫助,將不勝感激。
SerialPort
類不提供現成的功能,但是您可以添加此功能。 步驟(作為元代碼在記事本中編寫,您需要將其轉換為正確的C#並添加錯誤處理,邊界條件和參數檢查)
public event Action BytesWritten;
public void FireBytesWritten(){...}
public void OnBytesWritten(...){}
this.BytesWritten += OnBytesWritten;
SerialPort comport = new SerialPort("COM1", 38400, Parity.Even, 8, StopBits.One);
int chunkSize = 1; // 1 byte for the chunk size
for(int i = 0; i < buf.Length; i += chunkSize)
{
// Write small amount of bytes
comport.Write(buf, i, chunkSize);
// Fire an event saying that many bytes were written
FireBytesWritten(...);
//do checks for boundary conditions, add error handling if Write fails
}
是的,只需在您的班級內創建事件並在適當的時候觸發它。
http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx
正如您可以在文檔中輕松看到的那樣,內置SerialPort
類中沒有此類事件。 但是,您當然可以在包裝器類中編寫自己的方法,該類將消息分成較小的塊並提供此類事件。 當然,對性能的影響不大,但是由於串行線確實很慢,因此您不會感覺到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.