C# E LINQ - EVENTHANDLER NÃO EST? CARREGANDO

ANTONIOBSJ 26/05/2014 11:08:22
#438495
Amigos,

Tenho uma aplicação que usa Linq e o EventHandler não está carregando a procedure de manipulação de objetos:

        private void PreencheCampos()
{
SIGServicoContratoClient servicoContrato = new SIGServicoContratoClient();
servicoContrato.ContratoSelectAsync([Ô]CONTRATO_IDCONTRATO[Ô], this.IdContrato.ToString());
servicoContrato.ContratoSelectCompleted +=
new EventHandler<ContratoSelectCompletedEventArgs>(ContratoSelectCompleted);

servicoContrato.CloseAsync();
}

private void ContratoSelectCompleted(object sender, ContratoSelectCompletedEventArgs e)
{

try
{
if (e.Error != null) return;


this.dicDadosSazon.Add([Ô]AnoIni[Ô], [Ô]2014[Ô]);

Inicio = e.Result.First().conDataInicial;

}
catch (Exception ex)
{
Utilidades.GravaErro([Ô]SIGAssCadContrato.ContratoSelectCompleted[Ô], ex);
}
}


Alguém faz ideia por que

  
servicoContrato.ContratoSelectCompleted +=
new EventHandler<ContratoSelectCompletedEventArgs>(ContratoSelectCompleted);


Não chama a função ContratoSelectCompleted ?
JABA 26/05/2014 13:20:35
#438499
Esse seu código apenas cria um ponteiro para o método ContratoSelectCompleted(). Para que ele possa ser executado, o evento precisa ser ativado no objeto.

Dê uma olhadinha aqui: http://www.macoratti.net/12/06/c_event1.htm

vlw
ANTONIOBSJ 26/05/2014 13:37:33
#438503
JABA,

Eu estou tentando aprender esse projeto na [Ô]raça[Ô]. Eu não consegui entender como eu ativo esse evento no projeto.

Obrigado
OCELOT 26/05/2014 14:18:27
#438507
Neste caso pode ser que esteja acontecendo do evento ser disparado antes de você adicionar o handler dele, veja que primeiro você chama a função ContratoSelectAsync e só depois adiciona um handler para o evento ContratoSelectCompleted

Se o evento foi disparado pelo objeto antes de você adicionar o handler então ele nunca vai ser executado, o correto quando se chama uma função que dispara um evento é você primeiro adicionar os handlers e depois chamar a função, o contrário do que você fez.

Mas pode ser que o problema seja outro, não sei como funciona este objeto SIGServicoContratoClient que você está usando, então não tem como ter certeza do que está acontecendo.
ANTONIOBSJ 26/05/2014 14:58:19
#438508
SIGServicoContratoClient é uma classe que chama o Linq. Eu copiei de outra parte que funciona (verifiquei três vezes), mas em outro trecho não funciona.
JABA 26/05/2014 16:54:46
#438513
Resposta escolhida
Poste aqui a parte do código referente ao método --> servicoContrato.CloseAsync(); talvez o evento esteja sendo chamado dentro dele.
JABA 26/05/2014 16:58:03
#438514
Tente inverter a ordem do código dessa forma para ver se funciona:

private void PreencheCampos()
{
SIGServicoContratoClient servicoContrato = new SIGServicoContratoClient();

servicoContrato.ContratoSelectCompleted += new EventHandler<ContratoSelectCompletedEventArgs>(ContratoSelectCompleted);

servicoContrato.ContratoSelectAsync([Ô]CONTRATO_IDCONTRATO[Ô], this.IdContrato.ToString());

servicoContrato.CloseAsync();
}
Tópico encerrado , respostas não são mais permitidas