public void Write(byte[] Buffer) { if (this.mhRS == -1) { throw new ApplicationException("Please initialize and open port before using this method"); } try { if (this.meMode == Rs232.Mode.Overlapped) { if (this.pHandleOverlappedWrite(Buffer)) { throw new ApplicationException("Error in overllapped write"); } } else { Rs232.PurgeComm(this.mhRS, 12); int mhRs = this.mhRS; byte[] Buffer1 = Buffer; int length = Buffer.Length; int num = 0; // ISSUE: explicit reference operation // ISSUE: variable of a reference type int lpNumberOfBytesWritten = @num; Rs232.OVERLAPPED overlapped = (Rs232.OVERLAPPED)((object)null ?? Activator.CreateInstance(typeof(Rs232.OVERLAPPED))); // ISSUE: explicit reference operation // ISSUE: variable of a reference type Rs232.OVERLAPPED lpOverlapped = @overlapped; if (Rs232.WriteFile(mhRs, Buffer1, length, ref lpNumberOfBytesWritten, ref lpOverlapped) == 0) { throw new ApplicationException("Write Error - Bytes Written " + num.ToString() + " of " + Buffer.Length.ToString()); } } } catch (Exception ex) { ProjectData.SetProjectError(ex); throw; } }
private bool pHandleOverlappedWrite(byte[] Buffer) { this.muOverlappedW.hEvent = Rs232.CreateEvent(0, 1, 0, (string)null); if (this.muOverlappedW.hEvent == 0) { throw new ApplicationException("Error creating event for overlapped write."); } Rs232.PurgeComm(this.mhRS, 12); this.mbWaitOnRead = true; int num = 0; bool flag = false; if (Rs232.WriteFile(this.mhRS, Buffer, Buffer.Length, ref num, ref this.muOverlappedW) == 0) { int lastError = Rs232.GetLastError(); if (lastError != 997) { throw new ArgumentException("Overlapped Read Error: " + this.pErr2Text(lastError)); } if (Rs232.WaitForSingleObject(this.muOverlappedW.hEvent, -1) == 0) { if (Rs232.GetOverlappedResult(this.mhRS, ref this.muOverlappedW, ref num, 0) == 0) { flag = true; } else { this.mbWaitOnRead = false; //if (this.TxCompletedEvent != null) // this.TxCompletedEvent(this); } } } else { flag = false; } Rs232.CloseHandle(this.muOverlappedW.hEvent); return(flag); }