示例#1
0
文件: Zip.cs 项目: NickHola/Backupper
        public static bool DeComprimi(string percNomeFileZip, string percorsoEstrazione, ref Thread thrZip, string password = null, int timeOutMs = -1, Progressione progressione = null)
        {
            if (Zip.inizializzato == false && inizializza() == false)
            {
                return(false);
            }

            if (FS.ValidaNomeFile(percNomeFileZip, true, CheckExistenceOf.FolderAndFile) == false)
            {
                return(false);
            }

            if (FS.ValidaPercorsoFile(percorsoEstrazione, true, percFileFormattato: out percorsoEstrazione, verEsistenza: CheckExistenceOf.PathFolderOnly) == false)
            {
                return(false);
            }

            bool   esito  = false;
            Thread thread = Thr.AvviaNuovo(() => esito = ThrDeComprimi(percNomeFileZip, percorsoEstrazione, password, progressione));

            if (timeOutMs != 0)   //Non attendo il completamento del thr se = 0
            {
                if (Thr.AttesaCompletamento(ref thread, timeOutMs) == false || esito == false)
                {
                    return(false);
                }
            }

            return(true);
        }
示例#2
0
        private bool ThrEQ_Exec(ref Exception thrEx)
        {
            Thr.SbloccaThrPadre();

            thrEx = null;

            try
            {  //Il Try Catch serve quà poichè essendo un altro thread rispetto al chiamante, il chiamante non può intercettare le eccezioni
                if (@out == QryOut.dataTable)
                {
                    ResDt = new DataTable();
                    ResDt.Load(cmd.ExecuteReader());
                }
                else if (@out == QryOut.dataReader)
                {
                    if (ResOle != null && ResOle.IsClosed == false)
                    {
                        ResOle.Close();                                              //Se si riusa l'oggetto query con 'out' 'dataReader' senza una res specifica, bisogna chiudere l'OleDbDataReader
                    }
                    //resOle = cmd.ExecuteReader() 'Con cmd.ExecuteReader(CommandBehavior.CloseConnection) nel momento in cui su resOle eseguo il metodo.Close() si chiude anche il cmd.connection, meglio toglierlo poichè la connection mi serve aperta
                    ResOle = cmd.ExecuteReader();
                }
                return(true);
            }
            catch (Exception ex)
            {
                thrEx = ex;
                return(false);
            }
        }
示例#3
0
        private void thrAttesaValidazioneEOrdina(ref object oggT)
        {
            (oggT as ISortBindObj).SincroValidazioneRiordino = SincroValidazioneRiordino.RichiamatoRiordino; //Deve stare
            Thr.SbloccaThrPadre();
            (oggT as ISortBindObj).TimeOutValidazionMs = 1000;                                               //Possibilità poi aggiornarlo da validazione
            DateTime oraAtt = DateTime.Now;

            while ((oggT as ISortBindObj).SincroValidazioneRiordino == SincroValidazioneRiordino.RichiamatoRiordino || (oggT as ISortBindObj).SincroValidazioneRiordino == SincroValidazioneRiordino.InValidazione)
            {
                //DataOra.SleepConDoEvents(1);
                Thread.Sleep(1);
                if (DataOra.AttesaTempo(ref oraAtt, (oggT as ISortBindObj).TimeOutValidazionMs) == true)
                {
                    break;
                }
            }
            if ((oggT as ISortBindObj).SincroValidazioneRiordino != SincroValidazioneRiordino.ValidazioneTerminata)
            {
                Log.main.Add(new Mess(LogType.ERR, Log.main.errUserText, "SincroValidazioneRiordino non è ancora ValidazioneTerminata dopo:<" + (oggT as ISortBindObj).TimeOutValidazionMs + "> ms, valore SincroValidazioneRiordino:<" + (oggT as ISortBindObj).SincroValidazioneRiordino.ToString() + ">"));
            }

            if ((oggT as IValidation).IsValid == false)
            {
                return;
            }
            (oggT as ISortBindObj).SincroValidazioneRiordino = SincroValidazioneRiordino.InRiordino;
            Ordina();
            (oggT as ISortBindObj).SincroValidazioneRiordino = SincroValidazioneRiordino.FineRiordino;
        }
示例#4
0
文件: Zip.cs 项目: NickHola/Backupper
        /// <param name="oggDaCompr">può essere: string (file o cartella), List(Of String) (file o cartella), oggDaComprimere (file o cartella), List(Of oggDaComprimere) (file o cartella)</param>
        /// <param name="timeOutMs">0  ==  Non attende la compressione ma ritorna subito  |  -1 ==  Attesa infinita  |  XX ==  Attesa massima fino a XX ms</param>
        public static bool Comprimi(object oggDaCompr, string percNomeFileCompr, out Thread thrZip, TipiArchivio formatoArchivio = TipiArchivio.sevenZip, CompressionLevels livelloCompr = CompressionLevels.Ultra,
                                    string password = null, int timeOutMs = -1, Progressione progressione = null, Mess logMess = null)
        {
            thrZip = null;

            try
            {
                if (logMess == null)
                {
                    logMess = new Mess(LogType.Warn, Log.main.warnUserText);
                }

                if ((Zip.inizializzato == false) && inizializza(logMess) == false)
                {
                    return(false);
                }

                Dictionary <string, string> dizionario; bool esito;

                if (FS.ValidaPercorsoFile(percNomeFileCompr, true, percFileFormattato: out percNomeFileCompr, verEsistenza: CheckExistenceOf.PathFolderOnly, logMess: logMess) == false)
                {
                    return(false);
                }

                if (PreparazioneDizionario(oggDaCompr, out dizionario, logMess) == false)
                {
                    return(false);
                }

                if (dizionario.Count == 0)
                {
                    Log.main.Add(new Mess(LogType.info, "Non ci sono file da comprimere"));
                    return(true);
                }

                esito  = false;
                thrZip = Thr.AvviaNuovo(() => esito = ThrComprimi(dizionario, percNomeFileCompr, formatoArchivio, livelloCompr, password, progressione));

                if (timeOutMs != 0)
                { //Non attendo il completamento del thr se = 0
                    if (Thr.AttesaCompletamento(ref thrZip, timeOutMs) == false || esito == false)
                    {
                        return(false);
                    }
                }

                if (thrZip.ThreadState == ThreadState.Aborted)
                {
                    return(false);
                }

                return(true);
            }
            catch
            {
                return(false);
            }
        }
示例#5
0
 private void CalculateTandSw()
 {
     if (cmb_Wto.Text == "lbs")
     {
         S_w = Math.Round(Wto / Double.Parse(txt_W_S.Text), 1);
         Thr = Math.Round(Wto * Double.Parse(txt_T_W.Text), 1);
         txt_Thrust.Text = Thr.ToString();
         txt_SurfaceArea.Text = S_w.ToString();
     }
 }
示例#6
0
        internal static bool FiltraEccezioniQuery(Exception ex)
        {
            string mess, tipo; bool esito;

            mess  = ex.Message;
            tipo  = ex.GetType().ToString();
            esito = false;

            if (esito == false && mess.Contains("timeout") && mess.Contains("query"))
            {
                esito = true;
            }
            if (esito == false && mess.Contains(".net") && mess.Contains("framework") && mess.Contains("data") && mess.Contains("provider"))
            {
                esito = true;                                                                                                                              //Sub:ThreadStart_Context->thrCicloSincronizzaOraConServer->ExecQuery |  - Query:<SELECT excOra FROM excDispositivi WHERE idRnd='OV359'  --***Sub: thrCicloSincronizzaOraConServer>, ErrDescr:<Errore .Net Framework Data Provider 30 interno.> , ErrNum:<5>
            }
            if (esito == false && mess.Contains("provider") && mess.Contains("tcp"))
            {
                esito = true;
            }
            if (esito == false && mess.Contains("Errore") && mess.Contains("collegamento") && mess.Contains("durante") && mess.Contains("comunicazione"))
            {
                esito = true;                                                                                                                                           //Sub:ThreadStart_Context->thrCicloExchangeComandeEliminaTavoliChiusi->ExecQuery |  - Query:<SELECT idRiga FROM excComande  --***Sub: thrCicloExchangeComandeEliminaTavoliChiusi>, ErrDescr:<Errore di collegamento durante la comunicazione. Provider TCP: Il nome di rete specificato non è più disponibile.> , ErrNum:<5>
            }
            if (esito == false && mess.Contains("communication") && mess.Contains("link") && mess.Contains("failure"))
            {
                esito = true;
            }
            if (esito == false && mess.Contains("Impossibile creare una nuova connessione perché è attivata la modalità di transazione manuale o distribuita"))
            {
                esito = true;                                                                                                                                                 //<SELECT * FROM ExcCtrl WHERE nome='EventoInCorso'><Impossibile creare una nuova connessione perché è attivata la modalità di transazione manuale o distribuita.> lo ha generato poichè durante il runtime mi sono collegato ad un'altra rete
            }
            if (esito == false && mess.Contains("Riferimento a un oggetto non impostato su un'istanza di oggetto"))
            {
                esito = true;                                                                                                     //ErrDescr:<Riferimento a un oggetto non impostato su un'istanza di oggetto.> , ErrNum:<91>
            }
            if (esito == false && mess.Contains("Executereader richiede una oggetto connection aperto e disponibile. lo stato attuale della connessione è connessione in corso"))
            {
                esito = true;                                                                                                                                                                   //Sub:RunInternal->thrCicloSincronizzaOraConServer->ExecQuery |  - Query:<SELECT excOra FROM excDispositivi WHERE idRnd='6A>Õ0'  --***Sub: thrCicloSincronizzaOraConServer>, ErrDescr:<ExecuteReader richiede una oggetto Connection aperto e disponibile. Lo stato attuale della connessione è connessione in corso.> , ErrNum:<5>
            }
            if (esito == false && mess.Contains("Executereader richiede una oggetto connection aperto e disponibile. lo stato attuale della connessione è chiuso"))
            {
                esito = true;
            }
            if (esito == false && mess.Contains("La transazione non è associata alla connessione corrente oppure è stata completata"))
            {
                esito = true;                                                                                                                        //Sub:ThreadStart_Context->thrCicloExchangeComandeRicezione->ExecQuery |  - Query:<SELECT idRiga FROM excComande  --***Sub: thrCicloExchangeComandeRicezione>, ErrDescr:<La transazione non è associata alla connessione corrente oppure è stata completata.> , ErrNum:<5>
            }
            if (esito == false && Thr.FiltraEccezioniThreadNonCiclanti(ex) == true)
            {
                esito = true;
            }

            return(esito);
        }
示例#7
0
        internal UpLoad(string nome, object configSource = null) : base(nome)
        {
            queue       = new ConcurrentDictionary <UInt64, UploadItem>();
            this.config = new ConfigUpload(this.nome);
            //this.config = (ConfigUpload)Savable.Load(this.config);
            if (configSource != null)
            {
                this.config = (ConfigUpload)this.config.Load(configSource, out _);
            }

            thrScoda = Thr.AvviaNuovo(() => ThrCicloReadInputBufferAndElaborateMainQueue()); //ATTENZIONE deve stare dopo l'inizializzazione di coda
        }
示例#8
0
        private bool ThrENQ_Exec(out Exception thrEx)
        {
            Thr.SbloccaThrPadre();
            thrEx = null;

            try
            { //Il Try Catch serve quà poichè essendo un altro thread rispetto al chiamante, il chiamante non può intercettare le eccezioni
                cmd.ExecuteNonQuery();
                return(true);
            }
            catch (Exception ex)
            {
                thrEx = ex;
                return(false);
            }
        }
示例#9
0
        private void ThrAvvioUpload(UploadItem elemUpload)
        {
            Thr.SbloccaThrPadre();

            Thread thrDL;

            thrDL = Thr.AvviaNuovo(() => ThrUpload(ref elemUpload));

            if (Thr.AttesaCompletamento(ref thrDL, (elemUpload.TimeoutSec == -1 ? -1 : elemUpload.TimeoutSec * 1000)) == false)
            { //TimeOut
                elemUpload.DescErr     = "Timeout:<" + elemUpload.TimeoutSec + "> secondi, raggiunto";
                elemUpload.UploadState = UplItemState.Timeout;

                Log.main.Add(new Mess(elemUpload.tipoLogTimeout, "", "per l'url:<" + elemUpload.url + ">, " + elemUpload.DescErr));
            }
        }
示例#10
0
        private void CambioProprietaOggT(object sender, PropertyChangedEventArgs args)
        {
            ProprietàOggTCambiata?.Invoke(this, args); //?.Invoke invice della parentesi tonda diretta poichè se nessuno ha sottoscritto l'evento non va in eccezione

            //se la proprietà dell'oggetto di tipo T che è cambiata è tra la lista delle prop.che concorrono all'ordinamento allora rieseguo l'ordinamento
            if ((from tmp in listaOrdinamenti where tmp.PropertyDescriptor.Name == args.PropertyName select tmp).Count() > 0)
            {
                if (this.oggConValidazione == true)                                //ATTENZIONE: Se c'è la validazione di un item della lista da parte del datagrid, tale validazione viene richiamata solamente una volta terminati gli eventi richiamati...
                {
                    Thr.AvviaNuovo(() => thrAttesaValidazioneEOrdina(ref sender)); //...dall'onPropertyChange della proprietà variata(quindi al termine di questa CambioProprietaOggettoT), quindi lancio un thread separato...
                }
                else //                                                         ...che attenderà la fine della validazione per poi eseguire il riordino se l'oggetto risulterà valido
                {
                    Ordina();
                }
            }
        }
示例#11
0
 internal virtual void  DoTest(int iter, int nThreads)
 {
     Thr[] tarr = new Thr[nThreads];
     for (int i = 0; i < nThreads; i++)
     {
         tarr[i] = new Thr(this, iter, new System.Random((System.Int32)r.Next(System.Int32.MaxValue)));
         tarr[i].Start();
     }
     for (int i = 0; i < nThreads; i++)
     {
         tarr[i].Join();
     }
     if (failure != null)
     {
         Assert.Fail(failure); // TestCase.fail(failure);
     }
 }
示例#12
0
文件: Zip.cs 项目: NickHola/Backupper
        private static bool ThrComprimi(Dictionary <string, string> dizionarioDaCompr, string percNomeFileCompr, TipiArchivio formatoArchivio, CompressionLevels livelloCompr, string passsword, Progressione Progressione)
        {
            Thr.SbloccaThrPadre();
            SevenZipCompressor zipCompressor;

            try {
                zipCompressor = new SevenZipCompressor();

                if (Progressione != null)
                {
                    progressioniAttuali.Add(zipCompressor.UniqueID, Progressione);
                }

                zipCompressor.CompressionMode   = CompressionMode.Create;
                zipCompressor.TempFolderPath    = Path.GetTempPath();
                zipCompressor.ArchiveFormat     = (OutArchiveFormat)(int)formatoArchivio;
                zipCompressor.CompressionMethod = CompressionMethod.Lzma; //ATTENZIONE: la libreria 16.04 con Lzma2 in alcuni casi va in errore
                if (passsword != null)
                {
                    zipCompressor.EncryptHeaders      = true;
                    zipCompressor.ZipEncryptionMethod = ZipEncryptionMethod.Aes256;
                }

                //il formato 7zip se la dll viene eseguita a 32bit non accetta un livello di compressione superiore a Normal
                if (formatoArchivio == TipiArchivio.sevenZip && livelloCompr > CompressionLevels.Normal && Environment.Is64BitProcess == false)
                {
                    livelloCompr = CompressionLevels.Normal;
                }
                zipCompressor.CompressionLevel = (SevenZip.CompressionLevel)(int) livelloCompr;

                zipCompressor.Compressing         += PercentualeCompressa;
                zipCompressor.CompressionFinished += CompressioneTerminata;

                zipCompressor.CompressFileDictionary(dizionarioDaCompr, percNomeFileCompr, passsword);

                return(true);
            } catch (Exception ex) {
                if (Progressione != null)
                {
                    Progressione.ScatenaEventoTerminataConErrori(ex.Message);
                }
                //If progressioniAttuali.ContainsKey(zipCompressor.UniqueID) Then progressioniAttuali(zipCompressor.UniqueID).ScatenaEventoTerminataConErrori(ex.Message)
                return(false);
            }
        }
示例#13
0
        private bool ThrCDB_Exec()
        {
            Thr.SbloccaThrPadre();
            thrEx = null;

            try
            { //Il Try Catch serve quà poichè essendo un altro thread rispetto al chiamante, il chiamante non può intercettare le eccezioni
                cmd.Connection.Open();
                tra             = cmd.Connection.BeginTransaction(IsolationLevel.ReadCommitted);
                cmd.Transaction = tra;
                return(true);
            }
            catch (Exception ex)
            {
                thrEx = ex;
                return(false);
            }
        }
示例#14
0
文件: Zip.cs 项目: NickHola/Backupper
        private static bool ThrDeComprimi(string percNomeFileZip, string percorsoEstrazione, string passsword, Progressione progressione = null)
        {
            Thr.SbloccaThrPadre();

            SevenZipExtractor zipExtractor;

            try
            {
                if (passsword == null)
                {
                    zipExtractor = new SevenZipExtractor(percNomeFileZip);
                }
                else
                {
                    zipExtractor = new SevenZipExtractor(percNomeFileZip, passsword);
                }


                if (progressione != null)
                {
                    progressioniAttuali.Add(zipExtractor.UniqueID, progressione);
                }

                zipExtractor.Extracting         += PercentualeEstratta;
                zipExtractor.ExtractionFinished += EstrazioneTerminata;

                zipExtractor.ExtractArchive(percorsoEstrazione);

                return(true);
            } catch (Exception ex) {
                if (progressione != null)
                {
                    progressione.ScatenaEventoTerminataConErrori(ex.Message);
                }
                //If progressioniAttuali.ContainsKey(zipExtractor.UniqueID) Then progressioniAttuali(zipExtractor.UniqueID).ScatenaEventoTerminataConErrori(ex.Message)
                return(false);
            }
        }
示例#15
0
        private void ThrAvvioDownLoad(UInt64 itemKey)
        {
            Thr.SbloccaThrPadre();

            Thread thrDL;

            thrDL = Thr.AvviaNuovo(() => ThrDownload(itemKey));

            DownloadItem elemDownload = null;

            if (Concur.Dictionary_TryGet(this.queue, itemKey, ref elemDownload, out _) == false)
            {
                return;
            }

            if (Thr.AttesaCompletamento(ref thrDL, elemDownload.TimeoutSec == -1 ? -1 : elemDownload.TimeoutSec * 1000) == false)
            { //TimeOut
                elemDownload.DescErr       = "Timeout:<" + elemDownload.TimeoutSec + "> secondi, raggiunto";
                elemDownload.DownloadState = DwlItemState.Timeout;

                Log.main.Add(new Mess(elemDownload.tipoLogTimeout, "", "per l'url:<" + elemDownload.url + ">, " + elemDownload.DescErr));
            }
        }
示例#16
0
        public bool ConnettiDB(Mess logMess = null) //StrConnection strConn = null,
        {
            if (logMess == null)
            {
                logMess = new Mess(LogType.Warn, Log.main.warnUserText);
            }

            this.DisconnettiDB();  //Seve perchè se riutilizzo più volte ConnettiDB dentro una stessa funzione devo chiudere la connessione precedente
            bool esito; Thread thread; string testoTmp;

            esito = false;

            if (connStr == null)
            {
                logMess.testoDaLoggare = "Impossibile connettersi al DB poichè connStr è null";
                Log.main.Add(logMess);
                return(false);
            }

            if (connStr.DbRemoto == false)
            {
                try
                {
                    cmd.Connection = new OleDbConnection(connStr.Completa);

                    thread = Thr.AvviaNuovo(() => esito = ThrCDB_Exec());

                    if (Thr.AttesaCompletamento(ref thread, connStr.TimeOutConnMs) == false)
                    {
                        logMess.testoDaLoggare = "query:<" + cmd.CommandText + "> andata in timeOut, strConn.timeOutConnMs:<" + connStr.TimeOutConnMs + ">";
                        Log.main.Add(logMess);
                        return(false);
                    }

                    if (esito == false)
                    {
                        testoTmp = thrEx != null ? ", ex.mess:<" + thrEx.Message + ">" : "il thread ThrCDB_Exec è ritornato false ma senza eccezioni";

                        logMess.testoDaLoggare = "strConn.completa:<" + connStr.Completa + ">" + testoTmp;
                        Log.main.Add(logMess);
                        return(false);
                    }
                }
                catch
                {
                    Log.main.Add(new Mess(LogType.ERR, logMess.testoDaVisual, "Non è stato possibile connettersi al DataBase locale, strConn.completa:<" + connStr.Completa + ">", visualMsgBox: false));
                    return(false);
                }
            }
            else
            {
                //Dim idRndXConnRemote As String
                //idRndXConnRemote = GeneraStrRandom(5)
                //While stackConnRemoteCmd.TryAdd(idRndXConnRemote, sqlCmd) = False ' * **ATTENZIONE: usare sempre 'TryAdd' e mai la 'GetOrAdd' poichè quest'ultima non è detto che lo faccia l'add
                //End While
                //While stackConnRemoteTra.TryAdd(idRndXConnRemote, sqlTra) = False ' * **ATTENZIONE: usare sempre 'TryAdd' e mai la 'GetOrAdd' poichè quest'ultima non è detto che lo faccia l'add
                //End While
                //While stackConnRemoteStato.TryAdd(idRndXConnRemote, 2) = False  ' * **ATTENZIONE: usare sempre 'TryAdd' e mai la 'GetOrAdd' poichè quest'ultima non è detto che lo faccia l'add
                //End While
                //While stackConnRemoteStato(idRndXConnRemote) = 2
                //    Sleep(1)
                //End While
                //If stackConnRemoteStato(idRndXConnRemote) = 1 Then
                //    sqlCmd = stackConnRemoteCmd.GetOrAdd(idRndXConnRemote, sqlCmd)
                //    sqlTra = stackConnRemoteTra.GetOrAdd(idRndXConnRemote, sqlTra)
                //    EliminaIdRndXConnRemote(idRndXConnRemote)
                //    Return True
                //Else
                //    EliminaIdRndXConnRemote(idRndXConnRemote)
                //    Return False
                //End If
            }
            return(true);
        }
示例#17
0
        public bool ExecNoQuery(string query, CommitRoll commitRollback = CommitRoll.commitRollback, NuovaConn nuovaConn = NuovaConn.seNecessario, StrConnection strConn = null, Int32 timeOutQuery = 0, Mess logMess = null)
        {
            if (logMess == null)
            {
                logMess = new Mess(LogType.ERR, Log.main.errUserText);
            }
            logMess.testoDaLoggare = "";

            Thread thread; Exception thrEx = null; bool esito; string testoTmp;

            if (PreExec(true, query, ref strConn, nuovaConn, ref timeOutQuery, logMess) == false)
            {
                return(false);
            }

            esito  = false;
            thread = Thr.AvviaNuovo(() => esito = ThrENQ_Exec(out thrEx));

            if (Thr.AttesaCompletamento(ref thread, timeOutQuery) == false)
            { //qua non faccio rollback poichè presumo che la connessione remota sia andata persa, se DB in locale non può andare in timeout
                logMess.testoDaLoggare = "query:<" + cmd.CommandText + "> andata in timeOut:<" + timeOutQuery + ">";
                Log.main.Add(logMess);
                return(false);
            }

            if (esito == false)
            {
                try
                {
                    if (commitRollback == CommitRoll.commitRollback || commitRollback == CommitRoll.soloRollback)
                    {
                        tra.Rollback();
                        this.DisconnettiDB();
                    }
                }
                catch (Exception ex)
                {
                    logMess.testoDaVisual  = ""; //Non visualizzo nulla poichè c'è il l'altro log sotto
                    logMess.testoDaLoggare = "eccezione durante rollback, ex.Mess:<" + ex.Message + ">, query:<" + query + ">";
                    Log.main.Add(logMess);
                }

                if (thrEx != null)
                {
                    if (FiltraEccezioniQuery(thrEx) == true)
                    {
                        logMess.testoDaVisual = "";
                        logMess.tipo          = LogType.Warn;
                    }
                    testoTmp = "ex.mess:<" + thrEx.Message + ">";
                }
                else
                {
                    testoTmp = "il thread ThrENQ_Exec è ritornato false ma senza eccezioni";
                }


                logMess.testoDaLoggare = "query:<" + cmd.CommandText + ">, " + testoTmp;
                Log.main.Add(logMess);
                return(false);
            }

            try
            {
                if (commitRollback == CommitRoll.commitRollback)
                {
                    tra.Commit();
                    this.DisconnettiDB();
                }
            }
            catch (Exception ex)
            {
                if (FiltraEccezioniCommit(ex) == true)
                {
                    logMess.testoDaVisual = "";
                    logMess.tipo          = LogType.Warn;
                }

                logMess.testoDaLoggare = "errore durante 'sqlTra.Commit()', ex.Mess:<" + ex.Message + ">, query:<" + query + ">";
                Log.main.Add(logMess);
                return(false);
            }

            return(true);
        }
示例#18
0
        public void Run()
        {
            int i = 1;

            while (i <= countDetailsInModel)
            {
                try
                {
                    Program.s.WaitOne();
                    Thread.Sleep(100);
                    if (Program.conveyor.Count != 0 && !Program.overflow)
                    {
                        Detail d = Program.conveyor.Dequeue();
                        if (d.numModel == numModel && d.numPosInModel == i)
                        {
                            Console.WriteLine("Деталь № " + d.numPosInModel + " подошла для модели № " + numModel + "!!!!!!!!!!!!!!");
                            Console.WriteLine();
                            if (i == countDetailsInModel)
                            {
                                Console.WriteLine("Модель № " + numModel + " собрана" + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                                Thr.Abort();
                            }
                            else
                            {
                                i++;
                            }
                        }
                        else
                        {
                            if (Program.conveyor.Count < Program.lengthOfConveyor)
                            {
                                Console.WriteLine("Деталь  № " + d.numPosInModel + " не подошла для модели № " + numModel);
                                Program.conveyor.Enqueue(d);
                                Console.WriteLine("Деталь  № " + d.numPosInModel + " возвращена на конвейер");
                                Console.WriteLine();
                            }
                            else
                            {
                                Console.WriteLine("Конвейер переполнен! Завод стоит!");
                                Program.overflow = true;
                            }
                        }
                    }
                    Program.s.Release();
                }
                catch (ObjectDisposedException ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.WriteLine("Текущий экземпляр семафора уже был удален");
                }
                catch (AbandonedMutexException ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.WriteLine("Ожидание завершено, поскольку поток завершил работу, не освободив семафор.");
                }
                catch (InvalidOperationException ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.WriteLine("Текущий экземпляр является прозрачный прокси для WaitHandle в другом домене приложения.");
                }
            }
        }
示例#19
0
        //ATTENZIONE res se non è un ref non funziona
        public bool ExecQuery <T1>(string query, ref T1 res, QryOut @out = QryOut.dataTable, NuovaConn nuovaConn = NuovaConn.seNecessario, StrConnection strConn = null, int timeOutQuery = 0, Mess logMess = null)
        {   //Attenzione: l'out come Datatable costa di più in termini di cpu, dataReader costa meno
            if (logMess == null)
            {
                logMess = new Mess(LogType.ERR, Log.main.errUserText);
            }
            logMess.testoDaLoggare = "";

            Thread thread; Exception thrEx = null; bool esito; string testoTmp;

            if (PreExec(true, query, ref strConn, nuovaConn, ref timeOutQuery, logMess) == false)
            {
                return(false);
            }

            if (res == null)
            {
                this.@out = @out;
            }
            else
            {
                if (res.GetType() == typeof(DataTable))
                {
                    this.@out = QryOut.dataTable;
                }
                else if (res.GetType() == typeof(OleDbDataReader))
                {
                    this.@out = QryOut.dataReader;
                }
                else
                {
                    logMess.testoDaLoggare = "ricevuto res con tipo disatteso, res.GetType.Name:<" + res.GetType().Name + ">";
                    Log.main.Add(logMess);
                    return(false);
                }
            }

            esito = false;
            //se si perde la connessione prima di eseguire cmd.ExecuteReader() (può succede per DB remoto quando si è già connessi, quindi con nuovaConn=False) passano 47 secondi prima che ritorna l'errore data provider interno 30,
            thread = Thr.AvviaNuovo(() => esito = ThrEQ_Exec(ref thrEx), ApartmentState.MTA); //Attenzione se STA, alla 'resOle.Close()' c'è l'eccezione: Impossibile utilizzare oggetti COM separati dai relativi RCW sottostanti.

            if (Thr.AttesaCompletamento(ref thread, timeOutQuery) == false)
            {
                logMess.testoDaLoggare = "query:<" + cmd.CommandText + "> andata in timeOut:<" + timeOutQuery + ">";
                Log.main.Add(logMess);
                return(false);
            }

            if (esito == false)
            {
                if (thrEx != null)
                {
                    if (FiltraEccezioniQuery(thrEx) == true)
                    {
                        logMess.testoDaVisual = "";
                        logMess.tipo          = LogType.Warn;
                    }
                    testoTmp = "ex.mess:<" + thrEx.Message + ">";
                }
                else
                {
                    testoTmp = "il thread ThrEQ_Exec è ritornato false ma senza eccezioni";
                }

                logMess.testoDaLoggare = "query:<" + cmd.CommandText + ">, " + testoTmp;
                Log.main.Add(logMess);
                return(false);
            }
            //Ho dovuto eseguire la resDt.Load(cmd.ExecuteReader()) nel delegato poichè se esegiuvo la resDt.Load(DataReader) qua da la seguente eccezione
            //Impossibile eseguire il cast di oggetti COM di tipo 'System.__ComObject' in tipi di interfaccia 'IRowset'. L'operazione non è stata completata perché la chiamata QueryInterface sul componente COM per l'interfaccia con IID '{ 0C733A7C - 2A1C - 11CE - ADE5 - 00AA0044773D}
            //non è riuscita a causa del seguente errore: Interfaccia non supportata. (Eccezione da HRESULT: 0x80004002 (E_NOINTERFACE)).

            if (res != null)
            {
                if (this.@out == QryOut.dataTable)
                {
                    res = (T1)(dynamic)ResDt;
                }
                else if (this.@out == QryOut.dataReader)
                {
                    res = (T1)(dynamic)ResOle;
                }
            }

            return(true);
        }
示例#20
0
				private void  InitBlock(Thr enclosingInstance)
				{
					this.enclosingInstance = enclosingInstance;
				}
示例#21
0
		internal virtual void  DoTest(int iter, int nThreads)
		{
			Thr[] tarr = new Thr[nThreads];
			for (int i = 0; i < nThreads; i++)
			{
				tarr[i] = new Thr(this, iter, new System.Random(), 1);
				tarr[i].Start();
			}
			for (int i = 0; i < nThreads; i++)
			{
				tarr[i].Join();
			}
			if (failure != null)
			{
				Assert.Fail(failure);
			}
		}
示例#22
0
		internal virtual void  DoTest(int iter, int nThreads)
		{
			Thr[] tarr = new Thr[nThreads];
			for (int i = 0; i < nThreads; i++)
			{
				tarr[i] = new Thr(this, iter, new System.Random((System.Int32) r.Next(System.Int32.MaxValue)));
				tarr[i].Start();
			}
			for (int i = 0; i < nThreads; i++)
			{
				tarr[i].Join();
			}
			if (failure != null)
			{
                Assert.Fail(failure); // TestCase.fail(failure);
			}
		}
示例#23
0
 private void  InitBlock(Thr enclosingInstance)
 {
     this.enclosingInstance = enclosingInstance;
 }
示例#24
0
 public AnonymousClassFieldSelector(Thr enclosingInstance)
 {
     InitBlock(enclosingInstance);
 }
示例#25
0
        private void ThrDownload(UInt64 itemKey)
        {
            Thr.SbloccaThrPadre();
            DateTime  tmpAttesa;
            WebClient client = new WebClient();

            //client = new WebClient(); //TODO decommentare //, flusso As New IO.MemoryStream
            DownloadItem elemDownload = null;

            try
            {
                if (Concur.Dictionary_TryGet(this.queue, itemKey, ref elemDownload, out _) == false)
                {
                    return;
                }

                client.DownloadDataCompleted   += DownloadTerminato;
                client.DownloadProgressChanged += PercentualeDownload;

                client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); //Aggiungo lo user agent nell'header nel caso la richiesta contiene una query.
                elemDownload.OperationStartDate = DateTime.Now;
                elemDownload.DownloadState      = DwlItemState.DwlAvviato;

                client.DownloadDataAsync(new Uri(elemDownload.url), elemDownload);
                //client.DownloadData() //Non scatena gli eventi DownloadProgressChanged e DownloadDataCompleted

                //AttesaBoolean(client.IsBusy, -1) //Per le proprità(come IsBusy) se cambia di valore sembra che non lo sente quindi non posso utilizzare AttesaBoolean
                while (client.IsBusy)
                {
                    Thread.Sleep(1);
                }

                tmpAttesa = DateTime.Now;

                while (elemDownload.DownloadState == DwlItemState.DwlAvviato)
                {
                    if (DataOra.AttesaTempo(ref tmpAttesa, 1000) == true)
                    {
                        Log.main.Add(new Mess(LogType.ERR, Log.main.errUserText, "Da quando client non è Busy, lo statoDownload non si è aggiornato in tempo utile, elemDownload.url:<" + elemDownload.url + ">", visualMsgBox: false));
                        elemDownload.DownloadState = DwlItemState.Eccezione;
                        break;
                    }
                }

                //client.Dispose();
            }
            catch (ThreadAbortException ex)  //Thread interrupted by abort, do nothing
            { var tmp = ex; }
            catch (Exception ex)
            {
                Log.main.Add(new Mess(elemDownload.tipoLogEccezione, "", "Eccezione per l'url:<" + elemDownload.url + ">, ex.mess:<" + ex.Message + ">"));
                elemDownload.DescErr       = ex.Message;
                elemDownload.DownloadState = DwlItemState.Eccezione;
            }
            finally
            {
                //client.CancelAsync(); //TODO verificare se è la causa dell'errore  sul sito investing

                client.CancelAsync();
                client.Dispose();
            }
        }
示例#26
0
        protected override void ThrCicloReadInputBufferAndElaborateMainQueue()
        {
            Thr.SbloccaThrPadre();

            Thread   thrAvvioUL; Int32 numElemInUpl;
            DateTime timeoutStart; //UInt64 indiceProssElem;
            IOrderedEnumerable <KeyValuePair <UInt64, UploadItem> > elementiDaUpl;

            //indiceProssElem = 1;
#if DEBUG == false
            try
            {
#endif
            while (true)
            {
                Thread.Sleep(9);

                ControlloElementiEStatistiche();

                numElemInUpl = (from tmp in this.queue where tmp.Value.UploadState == UplItemState.UplAvviato select tmp).Count();

                if (numElemInUpl >= this.config.MaxParallelStreams)
                {
                    continue;
                }

                if (this.raggiuntoMaxKBSec)
                {
                    continue;
                }

                elementiDaUpl = from tmp in this.queue where tmp.Value.UploadState == UplItemState.Iniziale orderby tmp.Value.Priority ascending, tmp.Key ascending select tmp; //ho messo il >= indiceProssElem poichè se dovesse succedere che il metodo Accoda salta una chiave,
                                                                                                                                                                                //questo thread non si incanterà, esiste anche il metodo first e firstOrDefault, il primo da eccezione se la query linq non restituisce elementi, nel secondo per il parametro default non si può usare nothing
                if (elementiDaUpl.Count() == 0)
                {
                    continue;
                }

                thrAvvioUL = Thr.AvviaNuovo(() => ThrAvvioUpload(elementiDaUpl.ElementAt(0).Value));

                timeoutStart = DateTime.Now;
                while (true) //Check operation start on item
                {
                    if (elementiDaUpl.ElementAt(0).Value.UploadState != UplItemState.Iniziale)
                    {
                        break;                                                                        //operation started
                    }
                    if ((DateTime.Now - timeoutStart).TotalSeconds > timeoutToStartSec)
                    {
                        elementiDaUpl.ElementAt(0).Value.DescErr = "TimeoutToStart di " + timeoutToStartSec + " secondi raggiunto, url:<" + elementiDaUpl.ElementAt(0).Value.url + ">";
                        Log.main.Add(new Mess(elementiDaUpl.ElementAt(0).Value.tipoLogTimeout, "", "per l'url:<" + elementiDaUpl.ElementAt(0).Value.url + ">, " + elementiDaUpl.ElementAt(0).Value.DescErr));
                        elementiDaUpl.ElementAt(0).Value.UploadState = UplItemState.TimeoutToStart;
                        break;
                    }
                    Thread.Sleep(1);
                }

                //indiceProssElem = elementiDaUpl.ElementAt(0).Key + 1;
            }
#if DEBUG == false
        }

        catch (Exception ex) {
            Thr.NotificaErrThrCiclo(ex, true);
        }
#endif
        }
示例#27
0
        protected override void ThrCicloReadInputBufferAndElaborateMainQueue()
        {
            Thr.SbloccaThrPadre();
            DateTime timeoutStart;
            //UInt64 indiceProssElem;
            IOrderedEnumerable <KeyValuePair <UInt64, DownloadItem> > elementiDaDwl;
            DownloadItem elemDownload = null;

            //indiceProssElem = 1;

#if DEBUG == false
            try {
#endif
            while (true)
            {
                Thread.Sleep(9);

                while (inputBuffer.Count > 0)
                {
                    if (Concur.Queue_TryDequeue(inputBuffer, ref elemDownload) == false)
                    {
                        break;
                    }
                    idItem += 1;
                    elemDownload.IdItemInList = idItem;
                    Concur.Dictionary_TryAddOrUpdate(queue, new KeyValuePair <UInt64, DownloadItem>(idItem, elemDownload), noUpadate: true);
                }

                ControlloElementiEStatistiche();

                ItemInProcessing = (from tmp in this.queue where tmp.Value.DownloadState == DwlItemState.DwlAvviato select tmp).Count();

                if (ItemInProcessing >= this.config.MaxParallelStreams)
                {
                    continue;
                }

                if (this.raggiuntoMaxKBSec)
                {
                    continue;
                }

                elementiDaDwl = from tmp in this.queue where tmp.Value.DownloadState == DwlItemState.Iniziale orderby tmp.Value.Priority ascending, tmp.Key ascending select tmp; //A parità di priority prendo il più vecchio in coda

                ItemToProcess = elementiDaDwl.Count();

                if (ItemToProcess == 0)
                {
                    continue;
                }

                elemDownload = elementiDaDwl.ElementAt(0).Value; //Serve poichè gli elementi della LinQ si aggiornano all'istante quando un parametro della where o della orderby cambiano

                Thread thrDL = Thr.AvviaNuovo(() => ThrAvvioDownLoad(elementiDaDwl.ElementAt(0).Key));

                timeoutStart = DateTime.Now;

                while (true) //Check operation start on item
                {
                    if (elemDownload.DownloadState != DwlItemState.Iniziale)
                    {
                        break;                                                      //operation started
                    }
                    if ((DateTime.Now - timeoutStart).TotalSeconds > timeoutToStartSec)
                    {
                        elemDownload.DescErr = "TimeoutToStart di " + timeoutToStartSec + " secondi raggiunto, url:<" + elemDownload.url + ">";
                        Log.main.Add(new Mess(elemDownload.tipoLogTimeout, "", "per l'url:<" + elemDownload.url + ">, " + elemDownload.DescErr));
                        elemDownload.DownloadState = DwlItemState.TimeoutToStart;
                        break;
                    }
                    Thread.Sleep(1);
                }

                Thread.Sleep(config.SleepAfterOneOperationMs);

                //while (elemDownload.DownloadState == DwlItemState.DwlAvviato)
                //{
                //    Thread.Sleep(1);
                //}
                //indiceProssElem = elementiDaDwl.ElementAt(0).Key + 1;
            }
#if DEBUG == false
        }

        catch (Exception ex) {
            Thr.NotificaErrThrCiclo(ex, true);
        }
#endif
        }
示例#28
0
				public AnonymousClassFieldSelector(Thr enclosingInstance)
				{
					InitBlock(enclosingInstance);
				}
示例#29
0
        private void ThrUpload(ref UploadItem elemUpload)
        {
            Thr.SbloccaThrPadre();
            WebClient     client; string suffFileCorrotto; Uri fullUrlIniziale; DateTime tmpAttesa;
            FtpWebRequest ftpWebRequest; FtpWebResponse ftpResponse; FtpStatusCode ftpStatusCode;

            suffFileCorrotto = "";
            client           = new WebClient(); //, flusso As New IO.MemoryStream

            try
            {
                client.UploadDataCompleted   += UploadTerminato;
                client.UploadProgressChanged += PercentualeUpload;

                //client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)") 'Aggiungo lo user agent nell'header nel caso la richiesta contiene una query.

                client.Credentials = DammiCredenziali(ref elemUpload);

                elemUpload.OperationStartDate = DateTime.Now;
                elemUpload.UploadState        = UplItemState.UplAvviato;

                if (elemUpload.UploadType == UploadType.Ftp)
                {
                    if (elemUpload.CorruptFileNameSuffix != "")
                    {
                        suffFileCorrotto = elemUpload.CorruptFileNameSuffix;
                    }
                    else
                    {
                        suffFileCorrotto = config.suffFileCorrotto;
                    }
                }

                fullUrlIniziale = new Uri(Path.Combine(elemUpload.url, elemUpload.FileName) + suffFileCorrotto);

                client.UploadDataAsync(fullUrlIniziale, null, elemUpload.Data, elemUpload);
                //client.UploadData(fullUrl, elemUpload.dati)  'Non scatena glie eventi UploadProgressChanged e UploadDataCompleted

                //AttesaBoolean(client.IsBusy, -1) 'Per le proprità(come IsBusy) se cambia di valore sembra che non lo sente quindi non posso utilizzare AttesaBoolean
                while (client.IsBusy)
                {
                    Thread.Sleep(1);
                }

                tmpAttesa = DateTime.Now;

                while (elemUpload.UploadState == UplItemState.UplAvviato)
                {
                    if (DataOra.AttesaTempo(ref tmpAttesa, 1000) == true)
                    {
                        Log.main.Add(new Mess(LogType.ERR, Log.main.errUserText, "Da quando client non è Busy, lo statoUpload non si è aggiornato in tempo utile, fullUrlIniziale:<" + fullUrlIniziale.OriginalString + ">", visualMsgBox: false));
                        elemUpload.UploadState = UplItemState.Eccezione;
                        client.Dispose();
                        break;
                    }
                }

                client.Dispose();

                if (elemUpload.UploadType == UploadType.Ftp)
                {
                    ftpWebRequest             = (FtpWebRequest)System.Net.FtpWebRequest.Create(fullUrlIniziale);
                    ftpWebRequest.Credentials = DammiCredenziali(ref elemUpload);
                    ftpWebRequest.Method      = System.Net.WebRequestMethods.Ftp.GetFileSize;
                    //MyFtpWebRequest.RenameTo() = nomeFile

                    ftpResponse = (FtpWebResponse)ftpWebRequest.GetResponse();

                    if (elemUpload.Data.Length != ftpResponse.ContentLength)
                    {
                        Log.main.Add(new Mess(LogType.Warn, Log.main.warnUserText, "Rilevate dimensioni differenti tra dati da inviare e dati inviati, elemUpload.dati.Length:<" + elemUpload.Data.Length + ">, ftpResponse.ContentLength:<" + ftpResponse.ContentLength + ">, fullUrlIniziale:<" + fullUrlIniziale.OriginalString + ">"));
                        ftpResponse.Close();
                        return;
                    }

                    ftpResponse.Close();

                    ftpWebRequest             = (FtpWebRequest)System.Net.FtpWebRequest.Create(fullUrlIniziale);
                    ftpWebRequest.Credentials = DammiCredenziali(ref elemUpload);
                    ftpWebRequest.Method      = System.Net.WebRequestMethods.Ftp.Rename;
                    ftpWebRequest.RenameTo    = elemUpload.FileName;
                    ftpResponse = (FtpWebResponse)ftpWebRequest.GetResponse();

                    ftpStatusCode = ftpResponse.StatusCode;

                    if (ftpStatusCode != FtpStatusCode.FileActionOK)
                    {
                        Log.main.Add(new Mess(LogType.Warn, Log.main.warnUserText, "Non sono riuscito a rinominare il file, fullUrlIniziale:<" + fullUrlIniziale.OriginalString + "> in elemUpload.nomeFile:<" + elemUpload.FileName + ">"));
                        ftpResponse.Close();
                        return;
                    }
                    ftpResponse.Close();
                }
            }
            catch (ThreadAbortException ex)  //Thread interrupted by abort, do nothing
            { var tmp = ex; }
            catch (Exception ex)
            {
                Log.main.Add(new Mess(elemUpload.tipoLogEccezione, "", "Eccezione per l'url:<" + elemUpload.url + ">, ex.mess:<" + ex.Message + ">"));
                elemUpload.DescErr     = ex.Message;
                elemUpload.UploadState = UplItemState.Eccezione;
            }
            finally
            {
                client.CancelAsync();
            }
        }