26 messaggi dal 23 luglio 2013
Buongiorno a tutti,
mi sto scontrando con un problema fastidioso a cui non riesco a venirne a capo. Ho implementato un BackgroundWorker che si occupa di effettuare alcune comunicazioni verso un determinato dispositivo; durante la comunicazione passo alla procedura di comunicazione una funzione di callback che si occupa di aggiornare la percentuale di progressione (bw.ReportProgress) ma questa nonostante la corretta esecuzione non solleva l'evento ProgressChanged (si solleva solo al termine di tutte le operazioni effettuate riportando tutte le percentuali precedneti in un ciclo). Aggiungo che anche il WebMethod che dovrebbe riportare la percentuale di avanzamento rimane pendente durante le chiamate della UI. Credo mi sia sfuggito qualcosa di determinante riguardo l'architettura, vi è mai capitato? Riporto di seguito qualche dettaglio in più:

        [Serializable]
        public class ActiveSin
        {
            public int DeviceId = -1;
            public int Percent { get; set; }
            public string Info { get; set; }
        }

        private BackgroundWorker _bw;

        // percentuale avanzamento operazione dell'utente
        private static ActiveSin activeSin
        {
            get { return HttpContext.Current.Session["ActiveSin"] as ActiveSin; }
            set { HttpContext.Current.Session["ActiveSin"] = value; }
        }

        // procedura di callback per aggiornamento progressione
        protected void ProgressCallBack(OperationInfo result)
        {
            _bw.ReportProgress(result.Code);
            //activeSin.Percent = result.Code;
            //activeSin.Info = result.Description;
        }

        private void CommandExecute()
        {
            activeSin.Percent = 0;
            _bw = new BackgroundWorker
            {
                WorkerReportsProgress = true,
                WorkerSupportsCancellation = true
            };
            _bw.DoWork += new DoWorkEventHandler(bw_DoWork);
            _bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
            _bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
            _bw.RunWorkerAsync();
        }

        [System.Web.Services.WebMethod(EnableSession = true)]
        public static int GetProgress()
        {
            return activeSin.Percent;
        }

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.