Jump to content

Delphi chamada_delphi.png acbr.png

C6 chamada_c6.png botao.png

Trabalhando com Threads e ACBR


RobertoRP
  • Este tópico foi criado há 2402 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Em uma classe tenho esse método 

 

private void CarregamentoInicial()
        {
            var thread = new Thread(() =>
            {
                try
                {

                    _viewModel.CarregamentoInicial();
                    Dispatcher.Invoke(new MethodInvoker(AbrirLogin));
                    Dispatcher.Invoke(new MethodInvoker(Close));
                }
                catch (ExceptionMd5 ex)
                {
                    MessageBox.Show(ex.Message);
                }
                catch (InvalidOperationException ex)
                {
                    MessageBox.Show(ex.Message);
                }
            });

            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
        }

 

No meu método _viewModel.CarregamentoInicial();

tenho o seguinte conteúdo.

 

public void CarregamentoInicial()
        {
            try
            {
                var acbrEcf = AcbrFactory.ObterAcbrEcf();

                new Thread(() =>
                {
                    Informacao = "Gerando arquivo MD5";    
                }).Start();
                
                var md5 = new GerarMd5();
                md5.Executar();

                new AtualizarMd5(md5.Md5Final).Executar();

                new Thread(() =>
                {
                    Informacao = "Connectando com Ecf";    
                }).Start();
                

                new EcfInicializa().Iniciar();
                
                acbrEcf.IdentificaPAF("StarkPdv 1.0", md5.Md5Final);
            }
            catch (ExceptionMd5 ex)
            {
                throw new ExceptionMd5(ex.Message, ex);
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException(ex.Message, ex);
            }
        }

 

no primeiro método temos uma Thread

ele executa tudo ok, mas

quando na aplicação eu vou efetuar o login e faço uma verificação de acbr.NumSerie

ele lança a seguinte exception

An unhandled exception of type 'System.AccessViolationException' occurred in ACBrFramework.Net.dll

Additional information: Tentativa de leitura ou gravação em memória protegida. Normalmente, isso é uma indicação de que outra memória está danificada.

 

Dentro do atributo acbr.NumSerie (e outros vários atributos tenho uma exception)

'acbr.NumSerie' threw an exception of type 'ACBrFramework.ACBrExcepiton'

 

o meu problema e basicamente rodar o acbr dentro de uma thread com sucesso (e a solução que espero)

obs: si eu retirar a Thread , a acbr irá funcionar perfeitamente não irá lançar nem uma exception , funciona tudo beleza

Link to comment
Share on other sites

  • 1 month later...

Assim, queria colocar tudo numa splash screen (uma tela de load)

enfim...

Descobri o problema, olha não sei o motivo mas eu tive simplesmente que instanciar os componentes da ACBR primeiro , se eu instancio uma variável qualquer antes,

os componentes da acbr ficam cheio de exceptions dentro deles e lançando erro citado a cima.

 

 

Link to comment
Share on other sites

  • Este tópico foi criado há 2402 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.