void bgw_DoWork(object sender, DoWorkEventArgs e) { if (Meter != null && (!Meter.Port.IsOpen || Meter.Port.PortName != ((string[])e.Argument)[0])) { Meter.Dispose(); Meter = null; System.Threading.Thread.Sleep(2500); } Meter = (IMeter)Activator.CreateInstance(Type.GetType("GlucaTrack.Communication.Meters." + ((string[])e.Argument)[1] + ", GlucaTrack.Communication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")); Meter.ReadFinished += new EventHandler(OnReadFinished); Meter.RecordRead += new EventHandler(OnRecordRead); Meter.HeaderRead += new EventHandler(OnHeaderRead); Console.WriteLine("Connecting to " + ((string[])e.Argument)[0]); if (!Meter.Port.IsOpen) { Meter.Connect(((string[])e.Argument)[0]); } if (Meter.IsMeterConnected(((string[])e.Argument)[0])) { if (!Meter.Port.IsOpen) { Meter.Connect(((string[])e.Argument)[0]); } Meter.Port.DiscardInBuffer(); Meter.Port.DiscardOutBuffer(); Meter.ReadData(); } }
private static void StubFindSerialDevices(object sender, DoWorkEventArgs e) { DeviceInfo dinfo = null; string comport = (string)e.Argument; if (Thread.CurrentThread.Name == null) { Thread.CurrentThread.Name = comport; } var MeterTypes = Assembly.GetExecutingAssembly().GetTypes() .Where(t => t.IsClass) // Only include classes .Where(t => t.IsSubclassOf(typeof(AbstractMeter))) .Where(t => t.GetInterfaces().Contains(typeof(IMeter))) .OrderBy(t => t.Namespace) .ThenBy(t => t.Name); //for each com port test each meter type to see if its on that port foreach (var reflect in MeterTypes) { Type t = reflect.UnderlyingSystemType; IMeter meter = (IMeter)Activator.CreateInstance(t); //if failed to connect skip this meter if (!meter.Connect(comport)) { continue; } try { Console.WriteLine("Testing " + comport + " for " + reflect.UnderlyingSystemType.ToString()); if (meter.Port.IsOpen && meter.IsMeterConnected(comport)) { dinfo = new DeviceInfo(); dinfo.DeviceType = t; dinfo.ComPortName = comport; dinfo.HIDDevice = false; dinfo.Device = meter; lock (DevicesFound) { DevicesFound.Add(dinfo); return; //found a device so return. Can be removed to find all devices on a system. } } }//try finally { meter.Dispose(); } } }