locked
Impressora Bluetooth e Métodos Assíncronos no Windows Phone 8 RRS feed

  • Pergunta

  • Olá pessoal,

    Bom estou desenvolvendo um aplicativo que imprime dados usando uma impressora termica via bluetooth (Datecs DPP-350), consigo estabelecer uma conexão e tudo mais, o problema aparece na hora de imprimir, o app imprime apenas uma vez, na próxima tentativa de imprimir ele simplesmente não faz anda, nem o break point responde.

    public void TestarImpressão( Printer impressora )
    {
    	StringBuilder texto = new StringBuilder();
    
    	texto.Append( "{b}{w}{center}Patrimonio Tecnologia{/w}{br}" );
    	texto.Append( "{br}" );
    	texto.Append( "Teste de impressao" );
    
    	try
    	{
    		impressora.Reset(); //aqui fica o break point
    		impressora.PrintTaggedText( texto.ToString());
    		impressora.FeedPaper( 510 );
    
    	}
    	catch ( System.IO.IOException ex )
    	{
                Mensagem( "Falha ao imprimir página de teste: " + ex.Message );
    	}
    }

    Sendo mais específico no Output (onde ele envia o comando, bem no comando: task.await(); é onde ele para, um detalhe importante dizer é que o app não trava, fica funcionando normalmente.

    public int Write( byte[] buffer, int offset, int count )
    {
    	Task<int> task = null;
    	try
    	{
    		task = WriteAsync( buffer, offset, count );
    
    		task.Wait();
    		
    		if ( task.Exception != null ) throw task.Exception;
    	}
    	catch ( Exception ex )
    	{
            	throw new System.IO.IOException( "Error sending bytes: " + ex.Message );
    	}
    
    	if ( !task.IsCompleted )
    	{
    		throw new System.IO.IOException( "Sending bytes timeout" );
    	}
    	return task.Result;
    }

    Lembrando que o app imprime somente uma vez, na segunda tentativa ele vai até o task.await() e depois fica ocioso. Desconfio que isso tenha alguma coisa haver com algum método assíncrono, como não domino o assunto venho pedir ajuda de alguém. 

    fico no aguardo, desde já agradeço pela ajuda


    quinta-feira, 5 de fevereiro de 2015 14:46

Respostas

Todas as Respostas

  • Jorge,

    Não conheço muio de programação para Windows Phone, mas já montei algumas funcionalidades utilizando processamento paralelo e assíncrono.

    Vc poderia ter efetuar o processamento combinando o uso das classes Parallel e Task, a fim de fazer um teste e verificar se o problema persiste ou não. Escrevi um post sobre esses recursos há alguns dias, se quiser dar uma olhada num exemplo segue o link:

    http://social.technet.microsoft.com/wiki/pt-br/contents/articles/29709.processamento-paralelo-e-assincrono-no-net-framework.aspx

    Abs

    quinta-feira, 5 de fevereiro de 2015 15:03
  • Boa tarde Jorge,

    A resposta do Renato parece servir para o seu caso, da uma conferida caso não sirva desmarque como resposta que continuaremos te ajudando ok?

    Abraço


    Ricardo Cortes Microsoft Contingent Staff

    Esse contedo e fornecido sem garantias de qualquer tipo, seja expressa ou implicita.

    MSDN Community Support

    • Marcado como Resposta Jorge Kleber sexta-feira, 6 de fevereiro de 2015 15:46
    • Não Marcado como Resposta Jorge Kleber sexta-feira, 6 de fevereiro de 2015 15:46
    sexta-feira, 6 de fevereiro de 2015 14:22
  • Olá Renato,

    cara obrigado, o artigo me ajudou bastante encontrei na classe Task a solução para o meu problema

    private void RunAsync( Action action )
    {
      Task t = Task.Factory.StartNew( () =>
      {
      	try
      	{
      		action();
      	}
      	finally
      	{
      	   //Dispatcher.BeginInvoke( () =>
      	   //{
      			...			
      	   //} );
      	}
      } );
    }
    value ;)
    sexta-feira, 6 de fevereiro de 2015 15:45
  • Show, Jorge!

    Fico contente que tenha sido útil.

    Abs

    sexta-feira, 6 de fevereiro de 2015 15:52