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;
}