none
Erro ao acessar COM RRS feed

  • Pergunta

  • Boa tarde

    Pessoal estou com um problema para acessar um hardware via ip por portas COM, pela mensagem de erro sei que o problema inicial é de muito tempo tentando acessar,  gostaria que vocês me ajudem a entender ela melhor, segue abaixo

    The CLR has been unable to transition from COM context 0x2a7a78 to COM context 0x2a7be8 for 60 seconds. The thread that owns the destination context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages. This situation generally has a negative performance impact and may even lead to the application becoming non responsive or memory usage accumulating continually over time. To avoid this problem, all single threaded apartment (STA) threads should use pumping wait primitives (such as CoWaitForMultipleHandles) and routinely pump messages during long running operations.

    terça-feira, 2 de outubro de 2012 17:12

Todas as Respostas

  • posta ai o código que tu utiliza pra acessar as portas cara... talvez agente tenha até alguma solução pra isso... mas como tu disse realmente erro de tempo tentando acessar, pelo que entendi a solução seria jogar numa thread este acesso e nesta thread utilizar o tal do CoWaitForMultipleHandles para que o sistema esperasse até a thread terminar a tarefa... lembro de algo assim utilizando pool de thread mas é muito vago... posta o código ai pra nós vermos

    terça-feira, 2 de outubro de 2012 20:03
  • Cada acesso é feito ao clicar em um botão, logo ele não fica 100% ativo, o usuário clica no botão o sistema conecta o aparelho via ip, executa a função, desconecta do aparelho deixando ele livre novamente, entre a opção de conectar e conectar existe uma sleep de 2 segundos, após clicar no botão todos os outros recursos desde conectar até concluir a tarefa e desconectar é automático

    Segue abaixo o código, ele é acionado ao clicar em um botão que chama a sub "usa"

    Imports System.Threading
    Imports Microsoft.VisualBasic
    Imports System.IO
    Imports System.Configuration
    Imports System.Net.NetworkInformation
    Imports System.Text
    Imports System.Drawing.Imaging
    Imports System.Drawing.Drawing2D
    Imports System.Linq
    Imports System.Net
    Imports System.Net.Sockets

    Private server As Socket Private porta As Integer = 5000 Private IP As String = "192.168.1.224" Public Sub conecta() ipep = New IPEndPoint(IPAddress.Parse(IP), porta) server = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) conStatus.Text = "Conectando..." conStatus.Text = IP Try server.Connect(ipep) conStatus.Text = "Conectado" Catch err As SocketException conStatus.Text = "Falha" conStatus.Text = (err.ToString()) Return End Try data = New Byte(1023) {} receivedDataLength = server.Receive(data) stringData = Encoding.ASCII.GetString(data, 0, receivedDataLength) lblResposta.Text = stringData End Sub Public Sub usa() conectaNovaComm() liga("1") System.Threading.Thread.Sleep("2000") desliga("1") desconecta() End Sub Public Sub liga(ByVal porta As String) comando = New Byte(1023) {} comando = Encoding.ASCII.GetBytes("set " + porta.ToString & vbCr & vbLf) server.Send(comando) RespModulo() saidas() RespModulo() End Sub Public Sub desliga(ByVal porta As String) comando2 = New Byte(1023) {} comando2 = Encoding.ASCII.GetBytes("reset " + porta.ToString & vbCr & vbLf) server.Send(comando2) RespModulo() saidas() RespModulo() End Sub Public Sub RespModulo() server.Send(comando) data = New Byte(1023) {} receivedDataLength = server.Receive(data) stringData = Encoding.ASCII.GetString(data, 0, receivedDataLength) lblResposta.Text = "" lblResposta.Text = stringData End Sub Public Sub saidas() comando = New Byte(1023) {} comando = Encoding.ASCII.GetBytes("outputs" & vbCr & vbLf) RespModulo() End Sub Public Sub desconecta() conStatus.Text = "Desconectando do Servidor..." server.Shutdown(SocketShutdown.Both) server.Close() conStatus.Text = "Desconectado" End Sub



    terça-feira, 2 de outubro de 2012 20:40