Pergunta

Eu estou usando discussão que receberá as mensagens do externa application.So meu fio shud estar vivo sempre.

Eu quero o meu fio para ser executado através de fora do aplicativo, sai do aplicativo até aos. Atualmente estou chamando meu segmento em Program.cs, que é o arranque para a aplicação das janelas c #. Por favor veja o código abaixo de saber como eu estou fazendo isso.

Quando eu uso o código abaixo, o segmento começa quando aplicativo é iniciado ... mas aborta alguma forma, após os recieves rosca uma mensagem do aplicativo externo.

Espero que eu sou claro com meu questio. Por favor ajude. Obrigado.


  static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        StartThread();
        Application.Run(new Screensaver());
    }
    public static void StartThread()
    {
            DeamonEngine Deamon = new DeamonEngine();
            Thread ThreadReciever = new Thread(Deamon.Receiver);
            if (!(ThreadReciever.IsAlive))
            {
                ThreadReciever.Start();
            }
        }
    }

A partir de um comentário:

    void Receiver() { 
        try { 
            Initiate socket s; 
            Bind Ip address; 
            s.Receiver[bytes]; 
            Access the members of message received in bytes;
            Assign the members of message to local variable;
            Read Xml File, get the node values and write to batch file; 
            Execute batch file. 
        } 
        catch { } 
    }
Foi útil?

Solução

Ter um fio de executar o método Receiver não significa que o segmento vai repetidamente executar o método.

Dado o código de processamento na pergunta, necessidades Daemon.Receiver para executar em um loop para que ele possa voltar e recuperar o próximo mensagem para processo. Deve ser algo como isto:

void Receiver() { 
    while(!done) // without this loop, only one execution will occur
    {
        try { 
            // do stuff
        } 
        catch { 
            // log/handle error
        } 

        // wait for next message
    }
}

Outras dicas

Normalmente o seu DaemonReceiver teria um código como este

while (!quit) 
{
  --- do work ---
  Thread.Sleep(1000);
}

Isso mantém o fio vivo até que você defina a variável global quit no segmento principal.

Além disso, é muito importante para não deixar exceções vazar para fora do seu segmento. Essas exceções não serão relatados em qualquer lugar e irá causar erros de silêncio, provavelmente o que você está experimentando agora. Fazer uma captura todos e, pelo menos, relatório sobre o assunto.

O seu código de inicialização parece bem: o meu prognóstico é que há algo de errado com DaemonEngine.Receiver(), talvez uma exceção está sendo lançada, ou talvez a própria função é estruturada para apenas lidar com uma única mensagem ... Sem ver a função exata é difícil dizer .

EDIT:

Para tirar as coisas dos meus comentários:

Algo está errado para matar seu segmento. Exceção, erro lógico, eu não posso dizer-lhe que, porque não há nenhum código do que está acontecendo dentro do seu segmento, mas algo está acontecendo. Não tem nada a ver com o código que você já postou que simplesmente recebe o segmento em execução, não mantém funcionando

Além disso, a partir do código que você postou, você está simplesmente jogando fora o fato de que havia uma exceção ... Eu não tenho um link na mão, mas engolir exceções como o que é horrível . Especialmente dentro de um segmento onde eles não aparecem como qualquer maneira normal.

Também não há indicação de um loop de qualquer tipo, assim que poderia ser uma ou ambas das minhas sugestões acima que está causando problemas.

O seu fio pode estar passando por uma exceção, que não está sendo capturado. Tente colocar um try-catch no método que está sendo executado e ver se você está recebendo uma exceção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top