public void CloseSerial()
 {
     try
     {
         KillMe = true;
         Thread.Sleep(1000);
         Win32Com.CloseHandle(_hPort);
     }
     catch (Exception)
     {
         // ignored
     }
 }
        public void InitSerial(string port)
        {
            var     portDcb = new DCB();
            COMSTAT cs;
            uint    er;

            _hPort = Win32Com.CreateFile(port, Win32Com.GENERIC_READ | Win32Com.GENERIC_WRITE, 0, IntPtr.Zero,
                                         Win32Com.OPEN_EXISTING, 0, IntPtr.Zero);
            if (_hPort == (IntPtr)Win32Com.INVALID_HANDLE_VALUE)
            {
                if (Marshal.GetLastWin32Error() == Win32Com.ERROR_ACCESS_DENIED)
                {
                    return;
                }
                throw new CommPortException("Port Open Failure");
            }

            bool isError = Win32Com.ClearCommError(_hPort, out er, out cs);

            Win32Com.SetupComm(_hPort, 516, 516);
            Win32Com.GetCommState(_hPort, ref portDcb);
            //portDcb.Init(false, false, false, 0, false, false, false, false, 0);
            portDcb.BaudRate  = 115200;
            portDcb.DCBlength = Marshal.SizeOf(typeof(DCB));
            portDcb.ByteSize  = 8;
            portDcb.Parity    = 0;
            portDcb.StopBits  = 0;

            Win32Com.SetCommState(_hPort, ref portDcb);
            Win32Com.EscapeCommFunction(_hPort, Win32Com.CLRRTS);
            Win32Com.EscapeCommFunction(_hPort, Win32Com.SETDTR);
            Win32Com.SetCommMask(_hPort, Win32Com.EV_RXCHAR);
            Win32Com.GetCommTimeouts(_hPort, out var commTimeouts);

            commTimeouts.ReadTotalTimeoutConstant   = 0;
            commTimeouts.ReadTotalTimeoutMultiplier = 0;

            Win32Com.SetCommTimeouts(_hPort, ref commTimeouts);
            JvsClient.HPort = _hPort;
        }