| ♥ 0 | Objectivo: ao abrir uma empresa ter uma série de código a correr “por tras” de forma a não bloquear a UI e, quando eventualmente acabar, abrir um CustomForm se necessário. O seguinte código “funciona” mas depois dá erro na inicialização do form, nomeadamente no componente PriGrelha. Presumivelmente tenho de o correr dentro de um BeginInvoke mas para isso preciso de passar a instancia do “main form” do ERP e não sei como o ir buscar dentro do evento DepoisDeAbrirEmpresa
private System.ComponentModel.BackgroundWorker backgroundWorker1;
public override void DepoisDeAbrirEmpresa(ExtensibilityEventArgs e)
{
this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);
this.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
//// Start BackgroundWorker
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker helperBW = sender as BackgroundWorker;
//int arg = (int)e.Argument;
e.Result = BackgroundProcessLogicMethod(helperBW);
if (helperBW.CancellationPending)
{
e.Cancel = true;
}
}
// Put all of background logic that is taking too much time
private int BackgroundProcessLogicMethod(BackgroundWorker bw)
{
//very lengthy code here
return alertas;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
int alertas = PSO.Utils.FInt(e.Result);
if (alertas > 0)
{
PSO.PainelNotificacoes.MostraAlerta("Auditor UWU", string.Format("Atenção, tem {0} alertas para validar!", alertas));
using (var instance = this.BSO.Extensibility.CreateCustomFormInstance(typeof(Forms.CBL.AuditorCBL)))
{
if (instance.IsSuccess())
{
(instance.Result as Forms.CBL.AuditorCBL).Show();
}
}
}
}
Marked as spam |
Como abrir CustomForm usando Multithreading
176 views