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();
            }
        }
示例#2
0
        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();
                }
            }
        }