private static void CleanDatabase(PrinterDatabaseEntities database)
 {
     foreach (var printer in database.Printers)
     {
         database.Printers.DeleteObject(printer);
     }
     database.SaveChanges();
 }
        private void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
        {
            var bg = (BackgroundWorker) sender;
            var database = new PrinterDatabaseEntities();
            var arguments = e.Argument as object[];

            var community = "";
            var ipFrom = "";
            var ipTo = "";
            var scan = false;

            if (arguments != null)
            {
                community = (string) arguments[0];
                scan = (bool) arguments[1];
                ipFrom = (string) arguments[2];
                ipTo = (string) arguments[3];
            }

            var snmp = new SimpleSnmp("", community)
            {
                PeerPort = 161,
                Timeout = 25,
                MaxRepetitions = 20
            };

            if (scan)
            {
                #region
                CleanDatabase(database);

                var ipFromSplit = ipFrom.Split('.');
                var ipToSplit = ipTo.Split('.');
                var ipFromLastOctet = Convert.ToInt32(ipFromSplit[3]);
                var ipToLastOctet = Convert.ToInt32(ipToSplit[3]);

                var ipRestOctets = string.Format("{0}.{1}.{2}.", ipFromSplit[0], ipFromSplit[1], ipFromSplit[2]);

                if (ipToLastOctet - ipFromLastOctet == 0)
                    bg.ReportProgress(0, 1);
                else
                    bg.ReportProgress(0, ipToLastOctet - ipFromLastOctet + 1);

                for (var i = ipFromLastOctet; i <= ipToLastOctet; i++)
                {
                    var ipAddress = string.Format("{0}{1}", ipRestOctets, i);

                    snmp.PeerIP = IPAddress.Parse(string.Format("{0}{1}", ipRestOctets, i));

                    try
                    {
                        var printerFound = new Printer
                                           	{
                                           		ID = Guid.NewGuid(),
                                           		IpAddress = ipAddress,
                                           		LastStatus = GetPrinterStatus(snmp),
                                           		MacAddress = GetMac(ipAddress)
                                           	};

                        database.Printers.AddObject(printerFound);
                    }
            // ReSharper disable EmptyGeneralCatchClause
                    catch{ }
            // ReSharper restore EmptyGeneralCatchClause

                    bg.ReportProgress(0);
                }
                database.SaveChanges();
                #endregion
            }
            else
            {
                #region
                bg.ReportProgress(0, 1);
                var tempPrintersList = new List<Printer>();
                foreach (var printer in database.Printers)
                {
                    snmp.PeerIP = IPAddress.Parse(printer.IpAddress);
                    tempPrintersList.Add(new Printer
                                            {
                                                ID = Guid.NewGuid(),
                                                IpAddress = printer.IpAddress,
                                                LastStatus = GetPrinterStatus(snmp),
                                                MacAddress = GetMac(printer.IpAddress),
                                            });

                    bg.ReportProgress(0);
                }

                //usuwanie z bazy
                CleanDatabase(database);

                //dodawanie do bazy
                foreach (var printer in tempPrintersList)
                {
                    database.Printers.AddObject(printer);
                }
                database.SaveChanges();
                #endregion
            }
        }