我使用螺纹,其将接收来自消息 外部application.So我的线程shud活着总是如此。

我希望我的线程运行,通过了申请, 直到应用程序退出。目前,我打电话给我的线程在Program.cs中, 它是Windows应用程序C#的启动。请参阅下面的代码 知道我是怎么做的吧。

当我使用下面的代码,线程开始若 应用程序启动...但它放弃一些如何,线程临危后  从外部应用的一个消息。

我希望我和我的questio清楚。请帮忙。感谢。


  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();
            }
        }
    }

从评论:

    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 { } 
    }
有帮助吗?

解决方案

有一个线程中执行的接收方法,并不意味着该线程将重复执行该方法。

鉴于该问题的处理代码,Daemon.Receiver需要在一个循环中执行,以便它可以返回并检索下一消息进行处理。它应该是这个样子:

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

        // wait for next message
    }
}

其他提示

通常是您DaemonReceiver将具有这样的代码

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

直到您设置在主线程的quit全局变量这样可以使线程活着。

此外,它是非常重要的是不要让异常泄漏你的线程。这些异常将不会在任何地方上报,并会导致无记载错误,可能是你现在正在经历什么。做就可以全部渔获物和至少报告。

您启动代码看起来不错:我的预测是有什么毛病DaemonEngine.Receiver(),或许是个例外被抛出,或者在没有看到确切功能很难说也许是函数本身的结构,只处理单个消息...

修改

要得到我的东西出来的我的意见:

事情错了要杀死你的线程。例外,逻辑错误,我不能告诉你,因为没有什么是你的线程内发生的代码,但事情正在发生。这无关你已经发布的代码只是获取线程运行,而不是保持它运行

另外,从已发布的代码,你只是扔掉的事实有一个例外......我没有手头上有链接,但吞咽异常一样,是的可怕。特别是内螺纹,他们不象正常显示反正。

但也没有任何形式的循环的迹象,因此它可能是上面那我的建议是造成问题的一个或两个。

您线程可能会遇到一个例外,这是不被抓住。尝试把一个try-catch中正在执行,看看你得到一个异常的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top